名前変更を使用して開始glを削除する

名前変更を使用して開始glを削除する

たとえば、ファイルのリストがあります。

./2020/47-06/gl-086115.org
./2020/47-06/gl-085792.org
./2020/47-06/gl-086941.org
./2020/47-06/gl-087140.pdf
./2020/47-06/gl-085982.pdf
./2020/47-06/gl-087032.org
./2020/47-06/gl-086115.pdf
./2020/47-06/gl-087490.pdf

gl-私は成功せずに開始を削除するために次のコマンドを使用しました。

find . -type f -name '*gl-*' -exec rename 's/^gl-//g' {} \;

答え1

これにより、次のことが行われます-d

$ find . -type f -name '*gl-*' -exec rename -n -d 's/^gl-//' {} \;
rename(./2020/47-06/gl-087032.org, ./2020/47-06/087032.org)
rename(./2020/47-06/gl-086941.org, ./2020/47-06/086941.org)
rename(./2020/47-06/gl-087140.pdf, ./2020/47-06/087140.pdf)
rename(./2020/47-06/gl-085792.org, ./2020/47-06/085792.org)
rename(./2020/47-06/gl-085982.pdf, ./2020/47-06/085982.pdf)
rename(./2020/47-06/gl-086115.org, ./2020/47-06/086115.org)
rename(./2020/47-06/gl-086115.pdf, ./2020/47-06/086115.pdf)
rename(./2020/47-06/gl-087490.pdf, ./2020/47-06/087490.pdf)

man rename:

-d、--filename、--nopath、--nofullpath
ディレクトリ名を変更しないでください。パスのファイル名部分のみが名前が変更されます。

-dスイッチがない場合

find ./2020/ -type f -name '*gl-*' -exec rename -n 's|/gl-|/|g' {} +

gl-しかし、パスに何か他のものがないように注意してください。

より安全なアプローチは次のとおりです。

find ./2020 -type f -name '*gl-*' -exec bash -c '
    cd $(dirname "$1")
    rename -n "s/gl-//" ./"$1"
' bash {} \;

-n出力に満足したら廃棄します。

関連情報