如何在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:-.}"/*
它列出(
cat
s)给定目录中的所有文件,即使目录或文件名包含空格、换行符或其他难以管理的字符。您可以使用任何合适的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/