我可以在 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
这会产生略有不同的输出,因为写入文件的路径名均以子文件夹的名称开头。
如果您对目录名不感兴趣而只想常规文件的路径名,请在目录名后使用find
with 。-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 帖子: