簡體   English   中英

在linux中遞歸運行命令

[英]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/
[...]

並使用zshbash 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM