확장자 없이 동일한 파일 이름으로 파일 이름을 바꾸려면 find 명령을 사용하십시오.

확장자 없이 동일한 파일 이름으로 파일 이름을 바꾸려면 find 명령을 사용하십시오.

파일 세트의 이름을 확장자는 제외하고 동일한 파일 이름으로 바꾸고 싶습니다. 그것들은 내 홈 디렉토리 전체에 흩어져 있으며 정확한 위치는 모르지만 제거할 확장자는 알고 있습니다.

이 작업을 수행하려면 단 하나의 명령만 필요합니다.

이것은 명령의 일부입니다:

$ find ~/ -type f -name "*.hhs" -exec mv {} <I DO NOT KNOW> \;

<I DO NOT KNOW>당신의 제안으로 대체할 수 있는 곳은 어디 입니까? 예를 들어 다음과 같이 교체해 보았습니다.

`basename {} .hhs`

나에게는 효과가 없습니다.


파일 file1.jpg.hhs과 파일이 발견되면 다음 과 file2.jpg.hhs같이 이름을 바꾸고 싶습니다.file1.jpgfile2.jpg

답변1

PERL 확장 기능이 있거나 설치할 수 있는 경우 rename( apt-get install renameDebian 기반 배포판의 경우)...

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.

관련된:

관련 정보