循环遍历目录中的所有文件[重复]

Posted

技术标签:

【中文标题】循环遍历目录中的所有文件[重复]【英文标题】:Looping through all files in a directory [duplicate] 【发布时间】:2012-01-20 16:46:04 【问题描述】:

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

【问题讨论】:

你试过什么? for 语句和 * 运算符的哪一部分让您感到困惑?你能更具体地说明一下你对 shell 的了解和不了解吗? 刚刚遇到这个 - 警告任何使用此作为参考的人 - 答案不能正确处理带空格的文件名......请参阅***.com/questions/7039130/…以获得更好的解决方案!!! 【参考方案1】:

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

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

仅用于文件(不包括文件夹),不用于递归

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

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

【讨论】:

如果当前目录恰好为空,则输出“put *”,而不是正确输出任何内容。可以修吗? @ThisClark - 确实如此。但我不确定答案是否完全符合您的要求是否决投票的好理由。 @ThisClark - 是的。但是对我自己很慷慨(!),有人可能会争辩说,从 *nix 的角度来看,文件夹 is 是一个文件。 (可能这就是我 7 年前写答案时的想法,但谁知道......) nix 代表什么?忽略文件与文件夹的区别是没有帮助的。 @ThisClark *nix 表示 unix、linux 等【参考方案2】:

递归(包括子目录中的文件)

find YOUR_DIR -type f -exec echo "put " \;

非递归(仅该目录中的文件)

find YOUR_DIR -maxdepth 1 -type f -exec echo "put " \;

使用*而不是YOUR_DIR搜索当前目录

【讨论】:

我在尝试此操作时收到错误 find 'dir': No such file or directory 愚蠢的我, dir 你的意思是用你想要的目录替换。尽管如此,还是有点混乱! 递归查找当前目录下的文件,将dir替换为* 这部分是做什么的? "put " 大括号 的特别含义 使用'.'对于当前目录中的所有文件,而不是 'dir'。请注意,find 还将遍历名称以点开头的“隐藏”文件/目录。【参考方案3】:

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

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

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

find . -type f -exec echo put  \;

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

【讨论】:

这不会列出以“.”开头的文件在 bash v3 (macOS) 中。有解决办法吗?【参考方案4】:

如果您没有任何文件,那么我们可以这样做而不是打印 *。

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

【讨论】:

【参考方案5】:

使用lssed 的另一种选择:

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

并使用lsxargs

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

【讨论】:

+1,但不需要-1,你可以做 sed -e 's/^/put /' @WilliamPursell 谢谢,我已经更新了我的回复。不知何故,我误解了大括号和美元符号作为解决方案的一部分。此外,我还使用xargsecho 提供了另一种解决方案,但sed 更简洁。【参考方案6】:

如果您在其中有任何子目录和文件,这也将递归地工作:

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

【讨论】:

以上是关于循环遍历目录中的所有文件[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何循环遍历 Perl 目录中的文件? [复制]

C语言遍历目录中的文件

PHP脚本循环遍历目录中的所有文件?

R:循环遍历目录中的所有文件,应用列替换命令

循环遍历子目录批处理文件中的文件

如何告诉ffmpeg按顺序遍历目录中的所有文件