Bash用
用 ...
替換 find 命令的多行輸出
我需要將命令的輸出替換
find
為另一個命令來處理每個找到的文件,例如:mdls `find ~/target_dir/ -iname '*some*' -depth 1`
(
mdls
是 OS X 中獲取指定文件的元數據屬性的命令。它不支持管道因此find ... | mdls
失敗。)上面的命令工作正常,但預計會在名稱中有空格的文件上失敗。我認為通過添加引號
sed
有助於它:$ find ~/target_dir/ -iname '*some*' -depth 1 | sed 's/\(.*\)/"\1"/' "/Users/shau-kote/target_dir//secondsomefile" "/Users/shau-kote/target_dir//some file with spaces in name" "/Users/shau-kote/target_dir//somefile"
唉,現在我的
mdls
命令在所有文件上都失敗了:$ mdls `find ~/target_dir/ -iname '*some*' -depth 1 | sed 's/\(.*\)/"\1"/'` "/Users/shau-kote/target_dir//secondsomefile": could not find "/Users/shau-kote/target_dir//secondsomefile".
如何修復它以便
mdls
正確處理來自的所有文件名find
?謝謝你。
PS我不確定它是否重要或不言自明,但是
mdls "/Users/shau-kote/target_dir//secondsomefile"
工作正常。
使用
find
’-exec
命令:find ~/target_dir/ -iname '*some*' -depth 1 -exec mdls {} \;
這將在 .
mdls
找到的每個匹配文件名上執行find
。它適用於任何文件名,甚至包含空格或換行符等的文件名。如果
mdls
可以在命令行上使用多個文件名,則可以使用而不是終止-exec
命令。例如+``\;
find ~/target_dir/ -iname '*some*' -depth 1 -exec mdls {} +