我正在寻找一种在bash中对我的整个目录包括隐藏文件、目录和链接进行简单循环的方法。
最好是使用bash语言实现,但也要考虑通用性。当然,文件名(和目录名)可能包含空格、换行符和符号等特殊字符,但不能包含“/”和ASCII NULL (0×0),即使在第一个字符位置。此外,结果应该排除“.”和“..”目录。
以下是文件生成器,循环需要处理这些文件:
#!/bin/bash
mkdir -p test
cd test
touch A 1 ! "hello world" \$\"sym.dat .hidden " start with space" $'\n start with a newline'
mkdir -p ". hidden with space" $'My Personal\nDirectory'
因此,我的循环应该像这样(但必须处理上面的棘手问题):
for i in * ;
echo ">$i<"
done
我最接近成功的尝试是使用ls
和bash数组,但它不能正常工作,原因是:
IFS=$(echo -en "\n\b")
l=( $(ls -A .) )
for i in ${l[@]} ; do
echo ">$i<"
done
unset IFS
或者使用bash数组,但“..”目录不被排除:
IFS=$(echo -en "\n\b")
l=( [[:print:]]* .[[:print:]]* )
for i in ${l[@]} ; do
echo ">$i<"
done
unset IFS
While read line; do; echo $line; done <<<$(ls -a)
应该可以工作。 - Ashish