特定レベルのサブフォルダの名前変更

特定レベルのサブフォルダの名前変更

次のように、親フォルダ内にサブフォルダのリストがあります。

Parent folder
    folder1
       foldera
    folder2
       folderb
    folder3
       folderc

サブフォルダ名から最後の2文字を削除して、2番目のレベルのサブフォルダ名を変更したいと思います。どうすればいいですか?私は次のことを試しました

find . -depth -type d -exec sh -c 'mv "${0}" "${0%??}"' {} \; 

しかし、成功しませんでした。

ベストアンサー1

いいえ。次のディレクトリ構造を考慮すると、findpureと一緒に使用できます。bash

./folder3
./folder3/folderc
./folder2
./folder2/folderb
./folder1
./folder1/foldera

注文する:

for f in folder*/*/; do mv -v "$f" "${f%???}"; done

後ろに:

./folder3
./folder3/folde
./folder2
./folder2/folde
./folder1
./folder1/folde

これファイル名拡張子ここではサブフォルダ内のフォルダだけが一致するfolder*/*/ため、最後にスラッシュがあります。このmvコマンドは、最後の2文字(上記の3文字)を削除します。なぜなら、末尾のスラッシュも変数値で計算されるからです。

おすすめ記事