我有find命令是這樣的:如何修改通過find命令傳遞給-exec的'{}'參數?
find <some criteria> -exec echo "{}" \;
但我想修改「{}」回聲之前的說法被調用。 例如,剝奪它的第一個路徑段($ {變量#* /})並保留其餘部分。
我知道我可以在執行完後調用另一個腳本,但我更喜歡在一個腳本中包含所有內容。
可能嗎?
我有find命令是這樣的:如何修改通過find命令傳遞給-exec的'{}'參數?
find <some criteria> -exec echo "{}" \;
但我想修改「{}」回聲之前的說法被調用。 例如,剝奪它的第一個路徑段($ {變量#* /})並保留其餘部分。
我知道我可以在執行完後調用另一個腳本,但我更喜歡在一個腳本中包含所有內容。
可能嗎?
你可以只是把它管sed
這樣的:
find <some criteria> | sed "s,.#*/,,"
你可以使用內聯SH-腳本:
find tmp -exec sh -c 'basename "{}" | wc' \;
用'-exec sh -c'basename「$ 1」| wc'_ {} \;''你可以避免代碼注入 – 2014-09-03 23:32:06
如果路徑有兩個以上的組件,'basename'不會和'$ {path#* /}'做同樣的事情。 @ thatotherguy的方法允許使用參數擴展形式:'find -exec sh -c'echo「$ {1#* /}」'_ {} \;'。儘管在這種情況下,解決方案可能是'exec'的'-printf'操作的'%P'格式指令。 (假設Gnu找到)。 – rici 2014-09-04 06:06:49
爲什麼不能管找到sed的? – 2014-09-03 23:13:59
對!我以前應該想到這一點。恥辱。 – ardabro 2014-09-04 07:02:57
我將它寫爲答案 – 2014-09-04 15:53:05