如何在shell脚本中将相对路径或绝对路径用作单个命令行参数?
例如,假设我的shell脚本在我的桌面上,我想循环浏览文件系统中某个文件夹中的所有文本文件。
我试过了,但这似乎不可行。如何避免目录名和带有空格的文件名?
myshscript.sh包含:

for i in `ls`
do
    cat $i
done

最佳答案

表面上,你可以写:

cd "${1:-.}" || exit 1
for file in *
do
    cat "$file"
done

但在这种情况下,您并不真正需要for循环:
cd "${1:-.}" || exit 1
cat *

会完成任务的。您可以通过以下方法避免cd操作:
cat "${1:-.}"/*

它列出(cats)给定目录中的所有文件,即使目录或文件名包含空格、换行符或其他难以管理的字符。您可以使用任何合适的glob模式来代替*-如果您希望文件以.txt结尾,那么使用*.txt作为模式,例如。
如果文件太多,参数列表太长,则会出现此问题。在这种情况下,您可能需要使用find
find "${1:-.}" -type f -maxdepth 1 -exec cat {} +

(请注意,-maxdepth是gnufind扩展。)
避免使用ls生成文件名列表,特别是当脚本必须在名称中的空格、换行符等方面保持健壮时。

关于linux - 如何在Bourne Shell脚本中打开目录中的所有文件?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21564564/

10-12 00:33
查看更多