我现在使用下面的bash脚本在每个2级深度目录中创建文件列表,并在每个特定文件夹中作为文本文件输出。
但是,我只能将其命名为" File.txt" 如何使用2级深度目录作为输出文本文件名
e.g。列出/ users / bin /中的文件时,输出文件应命名为" bin.txt"
这是我正在使用的代码。
#!/bin/bash
while IFS= read -r -d '' folder; do
echo $folder find "$folder" -type f > "$folder"/File.txt
done < <(find . -maxdepth 2 -mindepth 2 -type d -print0)
答案 0 :(得分:0)
您必须考虑当前工作目录中的(1)文件(除了'.'
之外没有路径组件),以及(2)2级目录中的其余文件。例如,如果要将当前目录中的文件列表输出到pwd.txt
,将级别2目录中的每个文件输出到具有相应目录名称的文件(例如./dir1/file_a.txt
到dir1.txt
}),你可以在你的循环体中做类似于以下的事情:
tmp="${folder%/*}" ## remove filename
lvl2name="${tmp##*/}" ## remove leading path components
[[ $lvl2name = '.' ]] && lvl2name="pwd" ## handle files in pwd to pwd.txt
echo $folder find "$folder" -type f >> "$lvl2name.txt"
在每次后续运行脚本之前,您需要截断任何现有的"$lvl2name.txt"
文件。在输入文件循环之前,您可以先调用find . -maxdepth 2 -type d ...
以获取目录名称或类似内容。
尝试一下,如果您有疑问,请告诉我。