2013-01-24 39 views
1

如果我不find ./,我得到类似的结果:截断发现./命令

/Volumes/FulfilmentArray//.Trashes/1060/ffmpeg2pass-0.log.mbtree.temp 

有没有办法做find ./命令仅返回文件名和容器文件夹?在上述情况下,这将是:

1060/ffmpeg2pass-0.log.mbtree.temp 

回答

2
find ./ | rev | cut -d/ -f-2 | rev 

一点解释可能会很长的路要走。使用的命令:

  • rev:反转每行中字符的顺序。 (man page
  • cut:删除每行文件中的部分。 (man page

所以前面的代码是干什么用一个例子如下:

  1. 打印出到当前目录下的所有文件的相对路径

    ./Machine Learning - Stanford/Self-notes/08-10.txt 
    
  2. 逆转路径字符串

    txt.01-80/seton-fleS/drofnatS - gninraeL enihcaM/. 
    
  3. 剪切在第二正斜杠离开第一部分(以使包括文件名和包含的文件夹,相对于其中在其中找到该文件夹​​被执行于)

    txt.01-80/seton-fleS --separated here-- /drofnatS - gninraeL enihcaM/. 
    
  4. 反转结果字符串

    Self-notes/08-10.txt 
    
2
find ./ | rev | cut -d/ -f-2 | rev 
+0

谢谢。这是否需要比普通的find命令更长的时间?我需要在大约1M个文件的卷上运行此操作。 – David542

+0

在'。/ file'等结果的情况下引导斜线,即当前目录中的文件。 – favoretti

+0

@ David542长约1-2秒。与时间查找相比,不是一个因素。 :) – Perleone

1

我敢肯定,AWK可能被交换出去的sed。因为你说过文件名,所以我添加了“-type f”标志,但是如果你想要目录,只需删除它。

find ./ -type f|awk -F'/' '{ print $(NF-1)"/"$NF }' 
0

这可能是去做一个办法:

find . | awk -F "/" '{ if (NF > 2) { print $(NF-1) "/" $NF; } else { print $NF; }}'