我正在尝试重命名以下目录结构
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
,但您走在正确的道路上。
限制递归深度
find
,以便重命名的目录本身不会被搜索。使用该-maxdepth
选项,并注意它必须出现前测试但是后根(即.
和之间-type d
)。因为您的
rename
命令假定您位于要重命名的目录的正上方,所以您需要使用该execdir
操作而不是exec
.与大多数其他操作一样,exec
是从find
顶部目录完成的(即.
在您的情况下),并且它传递从顶部到“找到的”条目的整个路径,而不仅仅是裸文件名(即在您的情况下,exec
传递就像是./Test1/2. - 1. Data
)。execdir
解决了这两个问题。