[英]Running command recursively in linux
我正在嘗試提出一個命令,在每個子文件夾中運行mp3gain FOLDER/SUBFOLDER/*.mp3
,但我無法理解為什么這個命令不起作用:
find . -type d -exec mp3gain \"{}\"/*.mp3 \;
運行時,我收到錯誤Can't open "./FOLDER/SUBFOLDER"/*.mp3 for reading
每個文件夾和子文件夾。
如果我用mp3gain "./FOLDER/SUBFOLDER"/*.mp3
手動運行命令mp3gain "./FOLDER/SUBFOLDER"/*.mp3
它可以工作。 出了什么問題?
如果你有像這樣的固定數據結構
folder1/subfolder1/
folder1/subfolder2/
folder2/subfolder1/
[...]
並使用zsh
或bash version >=4.0
你可以試試
mp3gain **/*.mp3
但要確保檢查輸出
ls **/*.mp3
在你認真對待mp3gain之前。
當您從shell運行mp3gain "./FOLDER/SUBFOLDER"/*.mp3
*.mp3
, *.mp3
會在傳遞給mp3gain
之前被shell擴展。 當find
運行它時,沒有涉及shell, *.mp3
正在逐字傳遞給mp3gain
。 后者不知道如何處理通配符(因為通常它不需要)。
嗯。 剛試過這個來測試如何通過用echo
替換mp3gain
來解析目錄,它可以工作:
find . -type d -exec echo {}\/\*.mp3 \;
嘗試運行您的命令版本,但使用echo
查看自己的文件輸出:
find . -type d -exec echo \"{}\"/*.mp3 \;
似乎引號會妨礙您的原始命令。
這工作......
find /music -name *mp3 -exec mp3gain -r -k {} \;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.