Bash 脚本循环遍历文件夹并将文件列表为文本

Bash 脚本循环遍历文件夹并将文件列表为文本

我可以在 Windows CMD 脚本中执行此操作,但现在我通过 Raspberry Pi 进入 Debian。

我想做的是...

(在当前文件夹中)

  • 对于每个子文件夹...
    • 创建一个名为original_filenames.txt的文件
    • 将文件夹名称回显到original_filenames.txt中
    • 将所有文件(包括任何子文件夹)列出到original_filenames.txt

答案1

使用 shell 循环:

for dir in */; do
    { printf '%s\n' "$dir"
      ( cd "$dir" && find . )
    } >"$dir/original_filenames.txt"
done

这会迭代当前目录中的所有子目录。循环体输出目录的名称,然后递归地输出该目录中所有文件和目录的列表。此输出将转到original_filenames.txt目录中的文件。

较短:

for dir in */; do
    find "$dir" >"$dir/original_filenames.txt"
done

这会产生略有不同的输出,因为写入文件的路径名均以子文件夹的名称开头。

如果您对目录名不感兴趣而只想常规文件的路径名,请在目录名后使用findwith 。-type f


请注意,如果您打算使用生成任何内容的输出文件,那么如果任何找到的路径名包含换行符(这在 Unix 系统上完全有可能),那么这将失败(或者至少是非常有问题的)。

答案2

您可以使用find命令和exec选项来执行此操作 - 如下所示:

find . -type d \( ! -name . \) -exec bash -c '
    dirname=$(basename "{}") && 
    cd "{}" && 
    echo "{}" > original_filenames.txt && 
    ls | grep -Fv original_filenames.txt >> original_filenames.txt
' \;

这是您可能会觉得有用的 StackOverflow 帖子:

相关内容