繰り返しサブディレクトリの名前を変更する

繰り返しサブディレクトリの名前を変更する

次のディレクトリ構造の名前を変更しようとします。

Tests Directory
├── Test1 Directory
│   ├── 2 - 1. Data
│   ├── 3 - 2. Data
│   ├── 4 - 3. Data
│   ├── 5 - 4. Data
│   ├── 6 - 5. Data
├── Test2 Directory
│   ├── 2 - 1. Data
│   ├── 3 - 2. Data
│   ├── 4 - 3. Data
│   ├── 5 - 4. Data
├── Test3 Directory
│   ├── 2 - 1. Data
│   ├── 3 - 2. Data
│   ├── 4 - 3. Data
│   ├── 5 - 4. Data
│   ├── 6 - 5. Data

そして

Tests Directory
├── Test1 Directory
│   ├── 1. Data
│   ├── 2. Data
│   ├── 3. Data
│   ├── 4. Data
│   ├── 5. Data
├── Test2 Directory
│   ├── 1. Data
│   ├── 2. Data
│   ├── 3. Data
│   ├── 4. Data
├── Test3 Directory
│   ├── 1. Data
│   ├── 2. Data
│   ├── 3. Data
│   ├── 4. Data
│   ├── 5. Data

fd -t d -x rename 's/^(\d+ -)\s(\d+.)/$1/', Test1& Test2- を実行するとTest3動作します。

Testしかし、すべてのディレクトリで実行する必要がないようにコマンドを使用したいと思います。

頑張りました

% find . -type d -exec rename 's/^(\d+ -)\s(\d+.)/$1/' {} \;
% find . -type d -exec rename 's/^(\d+ -)\s(\d+.)/$1/' {} ";"

何も動作しません。どうですか?

詳細を追加してください。

% find . -maxdepth 2 -type d -execdir echo {} \;
./.
./Test1 Directory
./2 - 1. Data
./3 - 2. Data
./4 - 3. Data
./5 - 4. Data
./6 - 5. Data
./Test2 Directory
./2 - 1. Data
./3 - 2. Data
./4 - 3. Data
./5 - 4. Data
./Test3 Directory
./2 - 1. Data
./3 - 2. Data
./4 - 3. Data
./5 - 4. Data
./6 - 5. Data

ポリスチレン、ディレクトリ名にスペースがあります。

答え1

あなたの試みにいくつかの問題がありますが、find正しい道を行っています。

  1. find名前が変更されたディレクトリ自体が検索されないように、再帰深度を制限します。この-maxdepthオプションを使用し、このオプションが必要であることに注意してください。今後テストするが後ろにルート(例えば、.および間-type d)。

  2. コマンドは名前を変更したいディレクトリのすぐ上にあると仮定するため、代わりにそのrenameタスクを使用する必要があります。他のほとんどのタスクと同様に、このタスクは最上位ディレクトリ(たとえば、あなたの場合)で行われ、フルパスを渡します。一番上から「見つかった」項目までファイル名だけが表示されるわけではありません(つまり、あなたの場合は渡された項目です)。両方の問題が解決されました。execdirexecexecfind.exec./Test1/2. - 1. Dataexecdir

関連情報