2011-12-14 156 views
11

我想编写一个shell脚本,它将遍历文件夹中的所有文件并回显“放入$ {filename}”。任何人都可以将我指向正确的方向吗?Shellscript循环遍历文件夹中的所有文件

+2

你有什么试过? “for”语句和“*”运算符的哪一部分会让你困惑?你能更具体地了解你所知道的以及你不了解shell的内容吗? – 2011-12-14 22:15:26

+0

刚刚遇到这个 - 任何人使用此作为参考警告 - 答案不处理空格正确的文件名...参考https://stackoverflow.com/questions/7039130/iterate-over-list- of-files-with-spaces获得更好的解决方案! – blackghost 2017-06-02 15:59:42

回答

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

如果当前目录恰好为空,则输出“put *”而不是正确输出任何内容。它可以修复吗? – JWWalker 2013-04-27 01:47:19

3

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

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

该目录中只有文件?

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

当我尝试这个时,我得到错误`find'dir':没有这样的文件或目录`。 – gbmhunter 2013-12-19 22:44:44

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

或者,如果你想包含子目录:

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

如果你想包括文件夹本身,取出-type f部分。

1

一个比较另类的使用lssed

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

,并使用lsxargs

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

这也将工作递归,如果您有任何子目录和文件里面他们:

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

如果y你没有任何文件,那么,而不是打印*我们可以做到这一点。

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