![상위 디렉터리 이름을 바꿀 때 하위 디렉터리 이름을 바꾸지 마세요.](https://linux55.com/image/164522/%EC%83%81%EC%9C%84%20%EB%94%94%EB%A0%89%ED%84%B0%EB%A6%AC%20%EC%9D%B4%EB%A6%84%EC%9D%84%20%EB%B0%94%EA%BF%80%20%EB%95%8C%20%ED%95%98%EC%9C%84%20%EB%94%94%EB%A0%89%ED%84%B0%EB%A6%AC%20%EC%9D%B4%EB%A6%84%EC%9D%84%20%EB%B0%94%EA%BE%B8%EC%A7%80%20%EB%A7%88%EC%84%B8%EC%9A%94..png)
내 디렉토리 트리는 다음과 같습니다 -
/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' {} +