我有许多文件,放在许多文件夹中,我想创建一个 txt 文件,其中包含这些文件的完整路径以及它们所在目录的空格和名称。类似于:
halva/foo/bar/1/something.jpg 1
halva/foo/bar/2/another.jpg 2
halva/foo/bar/2/anotheranother.jpg 2
创建路径列表就像
find `pwd` -name *.jpg
但我不知道如何在路径后添加空格和目录名。我正在尝试对学校项目的内容进行分类。
答案1
$ find . -name *.jpg -exec bash -c 'd=${1%/*}; d=${d##*/}; printf "%s %s\n" "$1" "$d"' Out {} \;
./halva/foo/bar/1/something.jpg 1
./halva/foo/bar/2/another.jpg 2
./halva/foo/bar/2/anotheranother.jpg 2
对于 找到的每个文件find
,我们运行 bash 脚本d=${1%/*}; d=${d##*/}; printf "%s %s\n" "$1" "$d"
,其中第一个参数$1
是文件名。
我们用删除后缀,,d=${1%/*}
从完整文件名中获取目录名。然后我们使用前缀删除,,d=${d##*/}
从中删除除最后一个目录名称之外的所有内容d
。最后,printf
用于打印输出。
Out
除非 bash 命令出现错误,否则不会使用上述命令中的字符串,在这种情况下它充当有效的命令名称$0
。
将输出保存到文件
要将输出保存到文件,我们使用重定向:
find . -name *.jpg -exec bash -c 'd=${1%/*}; d=${d##*/}; printf "%s %s\n" "$1" "$d"' Out {} \; >SchoolProject.txt
该>
符号将标准输出重定向到其后面的文件名。