나는 명령을 사용해 보았습니다 :
mv *.1.gz.html *.html
그러나 나는 다음과 같은 응답을 받았습니다.
<filename
>은 디렉토리가 아닙니다.
어떻게 작동하게 할 수 있나요? 또한 rename 명령을 시도했지만 작동하지 못했습니다. 저에게는 정규 표현식이 너무 많습니다.
내가 더 잘 이해했다면 xargs를 사용하는 것이 효과가 있을 것이라고 생각합니다.
답변1
mv
단일 파일의 이름을 바꾸거나 여러 파일을 단일 디렉터리로 이동합니다.
많은 파일의 이름을 바꾸려면 rename
.
버전에 따라 rename
:
rename .1.gz.html .html *.1.gz.html
또는
rename 's/\.1\.gz\.html/\.html/' *.1.gz.html
첫 번째 버전은 작성하기가 좀 더 쉽고, 두 번째 버전은 더 강력하며 때로는 올바른 구문을 찾기 위해 perl-rename
.man rename
답변2
이와 같은 와일드카드는 일치하는 모든 항목으로 확장됩니다.앞으로명령 mv
도 실행됩니다. 더 나쁜 것은 파일과도 *.html
일치한다는 것입니다.*.1.gz.html
이는 (예를 들어 abc.1.gz.html
및 라는 이름의 두 파일 def.1.gz.html
) 위 명령이 기본적으로 실행 중임을 의미합니다.
mv abc.1.gz.html def.1.gz.html abc.1.gz.html def.1.gz.html
그러면 및 을(를 ) 이름의 디렉토리 abc.1.gz.html
로 이동하려고 시도합니다 . 다행히 파일이 디렉터리가 아니기 때문에 이 작업은 실패합니다.def.1.gz.html
def.1.gz.html
각 파일을 한 번에 보려면 몇 가지 스크립트를 작성해야 합니다. 예를 들면 다음과 같습니다.
for file in *.1.gz.html; do
mv "$file" "`echo $file | sed 's/\.gz\.html$/.html/'`"
done