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; }}'