모든 .sh 확장자를 삭제하고 싶었습니다.
ls *.sh | xargs -I {} mv {} `basename {} .sh`
그러나 작동하지 않으면 basename
변경되지 않은 파일 이름을 반환 하는 것처럼 작동 합니다.
왜 그런 식으로 작동합니까?
예를 들어 다음과 같이 작동합니다.
ls *.sh | xargs -I {} echo `basename {}.jpg .jpg`;
편집 :
솔루션 : 작은 따옴표 `basename ...`
는 명령이 실행되기 전에 쉘이 평가 하지 못하게 합니다.
ls *.sh | xargs -I {} sh -c 'mv {} `basename {} .sh`'
-i
옵션에 해당하지 않는 한 첫 번째 요지는 정확하지 않지만 해당 '클래식'옵션은 더 이상 사용되지 않습니다. 예를 들어, 하나의 옵션 / 라인 만 사용하려면 새로운 POSIX 매뉴얼 페이지를 권장-L1
합니다. 의 이전 비헤이비어를 호출하려면-i
페이지에서-I'{}'
옵션을 권장합니다 .