私のディレクトリツリーは次のとおりです -
/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
このオプションをサポートしていない場合(Perlバージョンがあると仮定してバージョン-d
1.10で導入されている場合)、各ディレクトリで実行するまでファイル名を渡すことができます。File::Rename
rename
find
rename
find . -depth -execdir rename 's/[?<>\\:*|\"]//g' {} +