2014-10-20 45 views
0

我需要做的是通過一個文件名列表來查找並找到打印這些文件的路徑xargs(find的-exec也可以)來執行一個命令。如何輸入剪貼板來查找命令?

我也知道,找到可以讀取文件名的文件,讀取行:

while read line; do find . -name "$line" -exec command '{}' \; ;done <file 

但在我的情況下,它會更方便有從剪貼板中找到讀取。

在剪貼板上,文件名是新行分隔的,所以當剪貼板打印出來時,它看起來就像提到的文件的文件內容。

我使用xsel來處理剪貼板(在Debian Linux中)。要在當前目錄中的剪貼板上列出的所有文件進行命令這是可能的:

xsel -b -o | xargs command 

但是使用find的想法當然是可以搜索任何對這些文件的遞歸列表。

如果下面的工作這將是很好,但是這隻能找到讀取列表上的第一個文件:

xsel -b -o | while read line; do find . -name "$line" -print0 | xargs -0 command ;done 

如果這是可糾正那麼這將解決這一問題。

重定向剪貼板(與<)找到並不完全正常工作,因爲bash說沒有這樣的文件 - 因爲find是期待文件。

一切會很容易發現是否可以接收多個名稱,而不需要每個旗模式(即-name dsc456.jpg -name dsc457.jpg)或一個可以在括號多個名稱一個-name格局,但從未來xsel -b -o可能很難反正。

所以這就是我的所在,我想知道是否有人對此有任何想法!我可能必須編寫一個腳本,將剪貼板寫入文件並從那裏開始。

+0

我沒有測試過,但如果你把它周圍是什麼? 'xsel -b -o |而讀線;找到。 -name「$ line」-print0;完成| xargs -0命令「,並且可能爲了安全,在」xargs「選項中添加一個」-r「。 – tripleee 2014-10-20 03:17:27

+0

我認爲這可能會從while循環中分離xargs - bash報告「沒有指定文件」 – mozerella 2014-10-20 03:36:41

回答

0

你可以管xargs而不是find

$ xsel -b -o | xargs -I X -r -n 1 find . -name X -exec command '{}' \; 
+0

它看起來不錯,但在bash中沒有結果。 ...抱歉,我剛剛錯了剪貼板內容。它運作良好! – mozerella 2014-10-20 03:41:51

+0

我測試過它,它可以在我的機器上運行。如果'-I'不適合你,請嘗試'--replace'。 – jfs 2014-10-20 03:43:52