Bash

在 find 中將函式的參數傳遞給 exec

  • December 5, 2020

我想定義一個函式來查找和替換多個文件中的文本。我找到命令行

find . -type f -exec bash -c 'mv "$1" "${1/<string_to_find>/<string_to_replace>}"' _ {} \;

因為我需要經常使用它,所以我想把它放到我.zshrc文件中的一個函式中,比如

myrename() {
   find . -type f -exec bash -c 'echo mv "$1" "${1/$arg1_myrename/$arg2_myrename}"' _ {} \;
}

以便在名稱中包含的$ myrename "<string_to_replace>" "<replacement>"文件夾中<string_to_replace>的所有文件執行時將其替換為<replacement>.

您可以將模式和參數作為環境參數傳遞給find

myrename(){
   in=$1 out=$2 find . -type f -exec bash -c 'mv -- "$1" "${1/$in/$out}"' _ {} \;
}

但是,正如 Kusalananda 所說,這就是rename事實。

myrename(){
   find . -type f -exec rename "s/$1/$2/" {} +
}

引用自:https://unix.stackexchange.com/questions/623016