我正在尝试编写一个脚本来做一些比我要向你展示的更复杂的脚本,但我知道这个问题就在这个部分。
我希望通过for
循环将目录中文件列表的每个名称分配给变量(同一个变量,一次一个),然后在循环内部执行此操作,看看是什么意思:
for thing in $(ls $1);
do
file $thing;
done
编辑:让我们说这个scrypt叫做Scrypt,我有一个名为Folder的文件夹,里面有3个名为A,B,C的文件。当我写这篇文章时,我想让它在终端上给我看:
./scrypt Folder
以下内容:
A: file
B: file
C: file
使用上面显示的代码,我得到了这个:
A: ERROR: cannot open `A' (No such file or directory)
B: ERROR: cannot open `B' (No such file or directory)
C: ERROR: cannot open `C' (No such file or directory)
这就是问题
答案 0 :(得分:3)
一种方法是使用通配符扩展而不是ls
,例如,
for filename in "$1"/*; do
command "$filename"
done
这假设$1
是包含文件的目录的路径。
如果您只想对普通文件进行操作,请在do
之后添加一个检查:
[ ! -f "$filename" ] && continue
答案 1 :(得分:3)
http://mywiki.wooledge.org/ParsingLs
改为使用globbing:
for filename in "$1"/* ; do
<cmd> "$filename"
done
请注意$ filename
周围的引号答案 2 :(得分:0)
您要完成的内容有点不清楚,但基本上可以使用find
已存在的功能执行相同的操作。例如,以下内容打印文件夹中找到的每个文件的内容:
find FolderName -type f -maxdepth 1 -exec cat {} \;
答案 3 :(得分:0)
阱, 我认为你的意思是循环将在所需的目录中显示文件名。 所以,我会这样做:
for filename in "$1"/*; do
echo "file: $filename"
done
结果应该是这样的(如果在dir中是3个文件,名称是A B C:
`file: A
`file: B
`file: C