2014-02-13 20 views
0

我寫在我的.bashrc文件的功能,這有助於我根據我作爲參數傳遞給函數的字符串查找文件:擊查找文件和顯示路徑功能

# ~/.bashrc 
function search { 
    find . -iname "*$1*" -printf "%f\n" 
} 

此功能好。它將打印出所有具有給定字符串的文件,這些文件位於我所在的目錄下,並且還包括所有子目錄中具有相同給定字符串的所有文件。只有它打印出每個文件而不是它的路徑。

如果我例如有一個包含一些子文件夾和文件這一功能會這麼多有用的,如果它會打印出的路徑,每一個文件,如果它們都位於所有子文件夾的文件夾。

F.ex.如果我有一個名爲Folder/和幾個子文件夾命名爲whatever_num和運行search thisandthat會吐出一個列表看起來像這樣的文件夾:

$ search thisandthat 
some-file-containing-thisandthat-in-its-filename.ext 
whatever_1/path/to/some-file-containing-thisandthat-in-its-filename.ext 
whatever_2/path/to/some-file-containing-thisandthat-in-its-filename.ext 

所以我queston是:我如何修改我的搜索功能,使其打印出我可能要搜索的文件的路徑?

謝謝!

+0

'$真實路徑.bashrc' –

+0

@JKB,你怎麼這麼建議我使用的realpath這個函數裏面? –

+0

如果您的問題得到解決,那麼您可以接受答案。 –

回答

0

感謝@JKB和@ acro444。他們的回答幫助我修改了我的搜索功能。我張貼我的答案,因爲我決定去與比他們張貼的一次稍有不同的解決方案,但它是由於他們的貢獻:

# ~/.bashrc 
function search { 
    find . -iname "*$1*" -printf "%P\n" 
} 

我做這種方式,因爲我不關心看到/home/myusername/...所有時間在路徑的其餘部分前面。我知道,我在我的/home/username/somefolder目錄始終/home/username/.....看到了一個可能出現的每個文件實在太多「噪音」我認爲沒有必要。

再次感謝您的幫助!

乾杯!

1

更改查找行:

find . -iname "*$1*" -printf "$(pwd)/%P\n" 
+0

謝謝你。 '%P'選項是我不知道的。 –

+0

'$ PWD'比'$(pwd)'更有效率(因爲後者產生了一個子殼)。 –

+2

......這樣說,最好還是使用'find'$ PWD「'並讓'find'本身完全限定路徑,而不是在格式字符串中進行。 (同樣,你不需要使用GNU擴展,因爲'-printf'不被POSIX保證)。 –

2
function search { 
    find `pwd` -iname "*$1*" 
} 
+0

謝謝你。 –

+0

'find「$ PWD」'會更高效(無子外殼)並且更加正確。 (嘗試用空格的目錄名中的其他方式!) –

+0

...。還有,'function'關鍵字是無效的POSIX - 這是更容易移植到以'搜索啓動功能(){' –