2016-03-23 176 views
0

我有以下目录结构:列出文件递归地目录名

~/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等没有更多的子目录。

我寻找一个脚本(任何语言,贝壳,蟒蛇等),它可以产生类似的输出:在mydir的所有目录中的所有文件的

<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 

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

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

我的目录结构: enter image description here

+0

请参阅:[bash/fish命令打印文件的绝对路径](http://stackoverflow.com/q/3915040/3776858) – Cyrus

+0

看看'os.walk()' – flaschbier

+0

你可以使用readlink -f 〜/ mydir/dirX/*其中X是您的目录的编号。 –

回答

1

的Python

import os 
for root, _, fnames in os.walk('/mydir'): 
    for fname in fnames: 
     print os.path.join(root, fname), fname 
0

,如果你有发现

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

与装饰

find . -type f -printf "<absolute path of %f> %h\n" 
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 
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" 
0

使用ls -d1 path/*/*的绝对路径,那么它管的Perl打印

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

~/没有得到扩展到绝对路径。 输出完全一样要求

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

如果递归上市需要使用path/**与支持它的壳(最)。