반복적으로 하위 디렉터리 이름 바꾸기

반복적으로 하위 디렉터리 이름 바꾸기

다음 디렉터리 구조의 이름을 바꾸려고 합니다.

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

관련 정보