2014-09-03 120 views
1

我有find命令是這樣的:如何修改通過find命令傳遞給-exec的'{}'參數?

find <some criteria> -exec echo "{}" \;

但我想修改「{}」回聲之前的說法被調用。 例如,剝奪它的第一個路徑段($ {變量#* /})並保留其餘部分。

我知道我可以在執行完後調用另一個腳本,但我更喜歡在一個腳本中包含所有內容。

可能嗎?

+1

爲什麼不能管找到sed的? – 2014-09-03 23:13:59

+0

對!我以前應該想到這一點。恥辱。 – ardabro 2014-09-04 07:02:57

+0

我將它寫爲答案 – 2014-09-04 15:53:05

回答

2

你可以只是把它管sed這樣的:

find <some criteria> | sed "s,.#*/,," 
3

你可以使用內聯SH-腳本:

find tmp -exec sh -c 'basename "{}" | wc' \; 
+2

用'-exec sh -c'basename「$ 1」| wc'_ {} \;''你可以避免代碼注入 – 2014-09-03 23:32:06

+2

如果路徑有兩個以上的組件,'basename'不會和'$ {path#* /}'做同樣的事情。 @ thatotherguy的方法允許使用參數擴展形式:'find -exec sh -c'echo「$ {1#* /}」'_ {} \;'。儘管在這種情況下,解決方案可能是'exec'的'-printf'操作的'%P'格式指令。 (假設Gnu找到)。 – rici 2014-09-04 06:06:49

相關問題