모든 파일에서 .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
파일 이름을 바꾸려면 삭제하세요.