親ディレクトリの名前が変更されても子ディレクトリの名前は変更されない

親ディレクトリの名前が変更されても子ディレクトリの名前は変更されない

私のディレクトリツリーは次のようになります -

/media/blueray/Data/Test$ tree
.
├── What????
│   └── What????
└── What????.txt

コマンドを実行するとfind . -depth | rename 's/[?<>\\:*|\"]//g'

それはこう言っている -

Can't rename ./What????/What???? ./What/What: No such file or directory

ただし、コマンドを実行すると、ディレクトリ構造は次のようになります。

/media/blueray/Data/Test$ tree
.
├── What
│   └── What????
└── What.txt

find木の上から検索を開始しているため、木を見失っているように見えます。

ここでの解決策は何でしょうか?

答え1

問題は によって発生しているのではなくfind、 によって発生していますrename。 はフルパスを処理しているため、./What????/What????に名前を変更しようとしますが、ディレクトリが (まだ) 存在しない./What/Whatため失敗します。What

を使用してrenameファイル名のみを処理すると、-dこの問題は修正されます。

find . -depth | rename -d 's/[?<>\\:*|\"]//g'

のバージョンがオプションrenameをサポートしていない場合-d( のバージョン 1.10 で導入されFile::Rename、Perl バージョンであると想定)、各ディレクトリ内で を実行することによってのみファイル名を渡すようにするrenameことができます。findrename

find . -depth -execdir rename 's/[?<>\\:*|\"]//g' {} +

(感謝フレディのためにソリューション

関連情報