递归获取它们所在的所有文件和目录

时间:2018-09-26 12:45:00

标签: linux bash macos

尝试运行一个脚本,该脚本将提取所有目录以及包含这些目录的文件,并将数据记录到.CSV文件中。

因此,如果我要具有以下结构: mainDir.dir-> [sub1.dir-> file01.png,sub2.dir-> file02.png] ,我会得到

的CSV
  • dir;文件
  • sub1; file01.png
  • sub2; file02.png

这是我目前拥有的脚本

setInterval

2 个答案:

答案 0 :(得分:1)

find对于递归处理许多文件很有用。

命令

find . -type f -execdir sh -c "pwd | tr -d '\n' >> ~/my_file.csv; echo -n ';' >> ~/my_file.csv; echo {} | sed -e 's/^\.\///' >> ~/my_file.csv" \;

注意:请确保您未提供输出CSV文件的相对路径。 execdir更改工作目录(这就是使pwd工作的原因)。

故障

find . -type f从此处开始递归查找所有文件

-execdir sh -c "pwd | tr -d '\n' >> ~/my_file.csv; echo -n ';' >> ~/my_file.csv;对于每个文件,在其目录pwd中执行。删除换行符并添加目录名称以输出。还要添加一个分号,再次没有换行符。

echo {} | sed -e 's/^\.\///' >> ~/my_file.csv" \;附加文件名以输出。这次,保留换行符,但是默认情况下,find会将./放在文件名前面。 sed在这里将其删除。

答案 1 :(得分:0)

如果您不需要超过一个级别的深度,这似乎可行

for i in **/*; do echo $i | tr / \; ; done >> file.csv