찾기/이름 바꾸기 명령이 작동하지 않습니다.

찾기/이름 바꾸기 명령이 작동하지 않습니다.

저는 Linux Slackware 14.0, bash 4.2를 사용하고 있습니다. 내 디렉토리에 2개의 파일이 있다고 가정해 보겠습니다.

bash-4.2$ ls
1.txt  2.txt

이름을 .svg로 바꾸고 싶습니다.이 답변그것이 승인되고 투표를 받았기 때문에 나는 그것이 효과가 있을 것이라고 생각했습니다. 그는 다음 명령을 사용했습니다.

find . -name "*.andnav" -exec rename -v 's/\.andnav$/\.tile/i' {} \;

그래서 비슷한 명령을 작성했지만 오류가 인쇄되었습니다.

bash-4.2$ find . -name "*.txt" -exec rename -v 's/\.txt$/\.svg/i' {} \;
rename: not enough arguments

파일을 인쇄하고 싶을 때 작동합니다.

bash-4.2$ find . -name "*.txt" -print
./1.txt
./2.txt

알아요. 더 간단한 방법으로 이름을 바꿀 수 있습니다.

bash-4.2$ rename .txt .svg ./*.txt
bash-4.2$ ls
1.svg  2.svg

그런데 왜 명령이 나오지 않습니까?저것답변이 나에게 도움이 되었나요?

답변1

renameLinux 배포판에는 두 가지 명령이 호출됩니다. 가지다기본 Linux 유틸리티 중 하나, 사용법은 다음과 같습니다.

rename SUBSTRING REPLACEMENT FILE...

이 명령은 지정된 각 파일에서 처음 나타나는 SUBSTRING을 REPLACMENT로 바꿉니다. 일반 문자열만 지원하고 와일드카드나 정규 표현식은 지원하지 않습니다. Debian 및 그 파생 제품(Ubuntu, Mint 등)에서는 이 명령을 이라고 합니다 rename.ul. 다른 Linux 배포판에서는 이라고 합니다 rename.

아직 하나 있어요Perl 스크립트 호출rename사용법은 다음과 같습니다.

rename 'PERL CODE' FILE...

Perl 코드의 일반적인 형태는 rename 's/REGEXP/REPLACEMENT/' FILE...각 파일 이름에서 처음 나타나는 REGEXP를 REPLACMENT(모든 항목을 바꿈)로 바꾸는 것 입니다 s/REGEXP/REPLACEMENT/g.

저자는당신이 보는 문제그가 우분투를 실행하고 있다는 것을 보여주었고, 그래서 그는 받아들였습니다.이 답변rename우분투에서 명령을 사용하십시오 .

표준 rename명령과 유사한 명령은 다음과 같습니다.

find . -name "*.txt" -exec rename .txt .svg {} \;

bash ≥4 일 때 사용할 수 있습니다**와일드카드 패턴설정 후globstar옵션를 사용하지 않고 하위 디렉터리의 파일과 일치합니다 find.

shopt -s globstar
rename .txt .svg **/*.txt

rename명령은 첫 번째 문자열에서 작동하므로 이름이 이라는 파일이 있는 경우 hello.txt.world.txt이름이 로 변경됩니다 hello.svg.world.txt.

관련 정보