如何在 Linux 中透過 find 指令使用 -exec 選項執行多個表達式?

如何在 Linux 中透過 find 指令使用 -exec 選項執行多個表達式?

我確實讀過這篇文章使用find時如何執行多個指令?。除非我誤解了所提供的答案,否則我不相信它提供了我正在尋求的解決方案。

我的要求是找到一組特定的文件。如果找到則建立一個目錄。如果目錄已成功創建,才可以提取檔案。解壓縮後刪除來源檔案。我怎樣才能實現這個目標?

答案1

在我看來,您發布的連結給出了“正確”的答案。只需生成一個外殼即可。如果不這樣做,您將沒有足夠大的工具箱。你可以用偽代碼建構一個 find 指令,例如:

find /path -criteria -exec mkdir {} \; -exec extract {} \; -exec rm {} \;

這將在出現任何錯誤時停止,因為謂詞自然地與在一起。但是,它使您無法充分控制目錄的命名。肯定會失敗。

產生 shell 可以解決這個問題,因為您將掌握整個 shell 語言:

find /path -criteria -exec /bin/sh '
    for d; do
        mkdir "${d##*/}" && tar xvf "$d" && rm "$d"
    done' _ {} +

請注意,此版本具有在循環的任何給定迭代中繼續出錯的副作用 - 它會產生一個 shell全部結果。如果您想在任何錯誤上停止,我建議使用 -e 標誌產生 shell。

相關內容