상위 디렉터리 이름이 바뀔 때 하위 디렉터리 이름이 바뀌지 않음

상위 디렉터리 이름이 바뀔 때 하위 디렉터리 이름이 바뀌지 않음

내 디렉토리 트리는 다음과 같습니다 -

/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'

귀하의 버전이 옵션(Perl 버전이라고 가정하고 버전 1.10에서 도입됨 ) rename을 지원하지 않는 경우 각 디렉토리 내에서 실행해야만 파일 이름을 전달할 수 있습니다 .-dFile::Renamerenamefindrename

find . -depth -execdir rename 's/[?<>\\:*|\"]//g' {} +

(덕분에프레디~을 위한해결책.)

관련 정보