Bash - 使用for循环遍历(仅)给定目录中的文件

时间:2015-11-04 23:43:37

标签: bash

我有以下问题:

我试图将目录中的文件重命名为小写。我试过了:

for i in *;

但这会迭代文件和目录(更改其名称)。我希望它只遍历给定目录中的每个文件。

我发现的每个解决方案都包含文件'。'和' ..',这是不受欢迎的。

2 个答案:

答案 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 /将过滤输出,并用/删除行