我有以下问题:
我试图将目录中的文件重命名为小写。我试过了:
for i in *;
但这会迭代文件和目录(更改其名称)。我希望它只遍历给定目录中的每个文件。
我发现的每个解决方案都包含文件'。'和' ..',这是不受欢迎的。
答案 0 :(得分:5)
测试它是否是文件,然后执行命令。如果它不是文件,&&
将短路,第二部分将不会执行。
for i in *; do [[ -f "$i" ]] && echo "$i"; done
答案 1 :(得分:0)
在Doon回答了几年之后,我发现了一个基于this Ask Ubuntu answer的(可以说)更好的解决方案。不需要在循环体内进行任何测试:
for fn in $(ls -p | grep -v /); do echo $fn; done
ls -p
将列出当前目录的内容,并在目录名后附加/
grep -v /
将过滤输出,并用/
删除行