파일 및 디렉토리 이름 변경 find -execdir | rename
단순히 접미사가 아닌 파일과 디렉토리의 이름을 바꾸려면 좋은 패턴입니다.
PATH="$(echo "$PATH" | sed -E 's/(^|:)[^\/][^:]*//g')" \
find . -depth -execdir rename 's/findme/replaceme/' '{}' \;
awesome -execdir
옵션 은와 달리 명령을 cd
실행하기 전에 디렉토리를 수행합니다 .rename
-exec
-depth
부모 디렉토리가 누락 될 때 발생할 수있는 잠재적 인 문제를 방지하기 위해 이름 변경은 먼저 자식에서, 그런 다음 부모에서 일어나야합니다.
-execdir
이름이 아닌 이름이 아닌 입력 경로에서 이름이 제대로 재생되지 않기 때문에 필수입니다 (예 : 다음 실패).
rename 's/findme/replaceme/g' acc/acc
PATH
때문에 해킹이 필요 -execdir
하나 매우 짜증나는 단점이 find
매우 독단적를하고 아무것도 할 거부 -execdir
당신이 당신의 상대 경로가있는 경우 PATH
예를 들어 환경 변수 ./node_modules/.bin
와 실패를 :
find : 상대 경로 './node_modules/.bin'이 PATH 환경 변수에 포함되어 있으며 find의 -execdir 조치와 함께 사용하면 안전하지 않습니다. $ PATH에서 해당 항목을 제거하십시오
참조 : /ubuntu/621132/why-using-the-execdir-action-is-insecure-for-directory-which-is-in-the-path/1109378#1109378
-execdir
POSIX에 대한 GNU 찾기 확장 입니다. rename
Perl 기반이며 rename
패키지 에서 제공 됩니다. 우분투에서 테스트 18.10.
미리보기 대안 이름 바꾸기
입력 경로가 출신이 아니 find
거나 상대 경로 성가심이 충분하면 Perl lookahead를 사용하여 다음과 같이 디렉토리 이름을 안전하게 바꿀 수 있습니다.
git ls-files | sort -r | xargs rename 's/findme(?!.*\/)\/?$/replaceme/g' '{}'
나는 편리한 아날로그 발견하지 않았습니다 -execdir
와 xargs
: xargs를 : 변화를 실행하기 전에 파일 경로로 작업 디렉토리를?
는 sort -r
더 이상 경로가 동일한 접두사와 짧은 사람 한 후 온 이후 파일이 각 디렉토리 이후에 올 수 있도록해야합니다.
rename
이나 레드햇이rename
있습니까?