찾기 및 이름 바꾸기를 사용하여 여러 파일의 이름을 바꾸는 방법

찾기 및 이름 바꾸기를 사용하여 여러 파일의 이름을 바꾸는 방법

모든 파일에서 .hs를 가져오고 싶습니다. 이 명령이 제대로 작동하지 않는 이유는 무엇입니까? 동일한 이름의 파일이 남습니다.

find . -type f -exec rename .hs ' ' * \;

답변1

바꾸다:

find . -type f -exec rename .hs ' ' * \;

그리고:

find . -type f -exec rename .hs '' {} \;

명령 에서 -exec파일 이름을 지정하려는 위치는 로 표시되어야 합니다 {}.

.hs또한 공백으로 바꾸는 대신 제거 하고 싶은 것 같아서 작은따옴표 사이의 공백을 제거했습니다.

문서

man find이 옵션에 대한 설명을 포함하세요 -exec.

-주문을 실행하는 것;
명령을 실행합니다. 상태 0이 반환되면 true입니다. find에 대한 다음 인수는 ;다음으로 구성된 인수가 발견될 때까지 명령에 대한 인수로 처리됩니다 .이 문자열은 {} 명령 인수에 나타나는 현재 처리 중인 파일의 이름으로 대체됩니다., find의 일부 버전에서처럼 단독으로 사용하는 인수에서만이 아닙니다. \쉘 확장으로부터 보호하기 위해 두 구성 모두 이스케이프하거나 인용해야 할 수도 있습니다 . -exec 옵션 사용에 대한 예는 예 섹션을 참조하세요. 일치하는 각 파일에 대해 지정된 명령이 한 번 실행됩니다. 이 명령은 시작 디렉터리에서 실행됩니다. -exec 작업을 사용할 때 피할 수 없는 보안 문제가 있으므로 이 -execdir 옵션을 사용해야 합니다. [강조하다. ]

답변2

사용Shell(Ksh, Bash, ksh93, mksh, zsh) 모드 교체 확장 ${var/Pattern/Replacement}(첫 번째 게임무늬, 이내에변하기 쉬운다음으로 교체대안. 또는 ${var//Pattern/Replacement};전역 교체. 모든 게임들무늬, 이내에변하기 쉬운다음으로 교체대안. 만약에대안생략된 다음 일치합니다.무늬로 대체됩니다아무것도 없다, 즉 삭제입니다. )

find . -type f -exec bash -c 'echo mv "$1" "${1/.sh/}"' _ {} \;

추신, echo파일 이름을 바꾸려면 삭제하세요.

관련 정보