파일 세트의 이름을 확장자는 제외하고 동일한 파일 이름으로 바꾸고 싶습니다. 그것들은 내 홈 디렉토리 전체에 흩어져 있으며 정확한 위치는 모르지만 제거할 확장자는 알고 있습니다.
이 작업을 수행하려면 단 하나의 명령만 필요합니다.
이것은 명령의 일부입니다:
$ find ~/ -type f -name "*.hhs" -exec mv {} <I DO NOT KNOW> \;
<I DO NOT KNOW>
당신의 제안으로 대체할 수 있는 곳은 어디 입니까? 예를 들어 다음과 같이 교체해 보았습니다.
`basename {} .hhs`
나에게는 효과가 없습니다.
예
파일 file1.jpg.hhs
과 파일이 발견되면 다음 과 file2.jpg.hhs
같이 이름을 바꾸고 싶습니다.file1.jpg
file2.jpg
답변1
PERL 확장 기능이 있거나 설치할 수 있는 경우 rename
( apt-get install rename
Debian 기반 배포판의 경우)...
find ~ -type f -name "*.hhs" -exec rename -d ".hhs" {} +
이 옵션은 -d
지정된 --delete
문자열을 삭제합니다.
답변2
.hhs
파일 이름에서 파일 이름 접미사를 제거할 수 있는 도구가 필요합니다 . find
이를 수행할 수 있는 방법이 없으므로 다음을 통해 다른 유틸리티를 호출해야 합니다 -exec
.
find "$HOME" -type f -name '*.hhs' -exec sh -c '
for pathname do
cp -i "$pathname" "${pathname%.hhs}"
done' sh {} +
여기서는 이를 사용 하지 않았습니다. basename
이렇게 하면 찾은 경로 이름에서 디렉터리 경로도 제거되기 때문입니다(다시 삽입하면 사용할 수 있지만 dirname
지저분한 코드가 생성됩니다).
대신 가능한 한 많은 경로 이름을 찾아 인라인 셸 스크립트를 호출하고 해당 경로 이름을 통해 스크립트 루프를 실행하여 개별 파일을 복사합니다. 새 이름은 .hhs
값 끝에서 문자열을 제거 하는 표준 매개변수 대체를 사용하여 구성됩니다 $pathname
.
관련된: