递归重命名子目录

递归重命名子目录

我正在尝试重命名以下目录结构

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命令假定您位于要重命名的目录的正上方,所以您需要使用该execdir操作而不是exec.与大多数其他操作一样,exec是从find顶部目录完成的(即.在您的情况下),并且它传递从顶部到“找到的”条目的整个路径,而不仅仅是裸文件名(即在您的情况下,exec传递就像是./Test1/2. - 1. Data)。execdir解决了这两个问题。

相关内容