Shell脚本循环遍历文件夹中的所有文件

时间:2011-12-14 22:14:14

标签: bash shell loops

我想编写一个shell脚本,它将遍历文件夹中的所有文件并回显“put $ {filename}”。有人能指出我正确的方向吗?

6 个答案:

答案 0 :(得分:25)

对于文件和目录,不是递归的

for filename in *; do echo "put ${filename}"; done

仅限文件(不包括文件夹),不是递归

for file in *; do 
    if [ -f "$file" ]; then 
        echo "$file" 
    fi 
done

对于递归解决方案,请参阅Bennet Yee的回答。

答案 1 :(得分:6)

递归,包括子目录中的文件?

find dir -type f -exec echo "put {}" \;

只有该目录中的文件?

find dir -maxdepth 1 -type f -exec echo "put {}" \;

答案 2 :(得分:6)

对于当前目录中的所有文件夹和文件

for file in *; do
    echo "put $file"
done

或者,如果您只想包含子目录和文件:

find . -type f -exec echo put {} \;

如果您想自己包含文件夹,请取出-type f部分。

答案 3 :(得分:2)

如果您没有任何文件,那么我们可以执行此操作,而不是打印*。

format=*.txt
for i in $format;
do
 if [[ "$i" == "$format" ]]
 then
    echo "No Files"
 else
    echo "file name $i"
 fi
done

答案 4 :(得分:1)

使用lssed的另一种选择:

$ ls -1 <dir> | sed -e 's/^/put /'

并使用lsxargs

$ ls -1 <dir> | xargs -n1 -i%f echo 'put %f'

答案 5 :(得分:0)

如果你有任何子目录和文件,这也会递归工作:

find . -type f|awk -F"/" '{print "put ",$NF}'