使用目录名以递归方式列出目录中的文件

时间:2016-03-23 21:17:40

标签: python bash shell awk

我有以下目录结构:

~/mydir/dir1/f1.jpg
~/mydir/dir1/f2.jpg

~/mydir/dir2/f3.jpg
~/mydir/dir2/f4.jpg
~/mydir/dir2/f5.jpg
~/mydir/dir2/f6.jpg

~/mydir/dir3/f7.jpg

即。目录(mydir)有许多子目录,而这些子目录中又包含许多图像。 dir1dir2等没有更多子目录。

我正在寻找一个可以产生输出的脚本(任何语言,shell,python等):

<absolute path of f1.jpg> dir1
<absolute path of f2.jpg> dir1
<absolute path of f3.jpg> dir2
.
.
<absolute path of f6.jpg> dir2
<absolute path of f7.jpg> dir3

即。 mydir中所有目录中所有文件的完整绝对路径,后跟一个空格,然后是该文件的目录(即该文件所在的最后一个目录)。

我正在使用find . -name \* -print来获取递归文件列表,但我不确定如何获得所需的确切输出。

我的目录结构: enter image description here

5 个答案:

答案 0 :(得分:1)

的Python

latin1

答案 1 :(得分:0)

如果找到了

find . -type f -printf "%f %h\n"

带有装饰

find . -type f -printf "<absolute path of %f> %h\n"

答案 2 :(得分:0)

$ cd ~
$ find mydir -type f | perl -p -e 's|(.*)/([^/]+)\n$|\1/\2 \1\n|g'
mydir/dir1/f1.jpg mydir/dir1
mydir/dir1/f2.jpg mydir/dir1
mydir/dir2/f3.jpg mydir/dir2
mydir/dir2/f4.jpg mydir/dir2
mydir/dir2/f5.jpg mydir/dir2
mydir/dir2/f6.jpg mydir/dir2
mydir/dir3/f7.jpg mydir/dir3

答案 3 :(得分:0)

您可以使用查找`pwd` 而不是查找。查找relatif_dir 来获取绝对路径:

cd ~/mydir ; find `pwd`  -type f -name "*.jpg" -exec sh -c 'echo "<absolute path of "`basename {}`">" `dirname {}`' \;

 cd ~/mydir ; find `pwd`  -type f -name "*.jpg"  | sed -e "s/\(.*\)\/\([^\/]*\)/<absolute path of \2> \1/g"

答案 4 :(得分:0)

使用ls -d1 path/*/*作为绝对路径,然后将其传输到Perl进行打印

ls -d1 ~/mydir/*/* | perl -lne 'print "<$_> ", m|.*/(.*)/[^/]*|'

~/确实扩展到绝对路径。 完全按照要求输出

</path_mydir/last_dir/filename> last_dir
...

如果需要递归列表,请使用支持它的path/**(大多数)。