mv [duplicate]를 사용하여 여러 파일의 첫 번째 부분 이름 바꾸기

mv [duplicate]를 사용하여 여러 파일의 첫 번째 부분 이름 바꾸기

디렉토리에는 다음 파일과 그 이상의 파일이 있습니다.

  • 파일 1.txt
  • 파일 1.html
  • 파일1.pdf
  • ...

모든파일 1로 교체해야합니다새로운 파일:

  • 새 파일.txt
  • newfile.html
  • 새 파일.pdf
  • ...

나는 시도했다:

for f in $(ls file1*); do mv $f newfile*; done

이것은 대체합니다모두파일 및파일 1파일로새로운 파일*.

for f in $(ls file1*); do mv $f ${f/$f/"newfile"}; done

이것은 또한 대체합니다모두파일 및파일 1파일로새로운 파일. 또는

find . -name "file1.*" -exec sh -c 'mv I DONT KNOW' _ {} \;

파일 이름의 일부를 변수로 설정하고 바꾸는 방법을 이해하지 못합니다.

mv를 사용하여 이 작업을 수행하는 가장 쉬운 방법은 무엇입니까?

답변1

Linux에서 실행 중인 경우 이를 구현하는 가장 쉬운 방법은 다음을 사용하는 것입니다 rename(패키지의 일부입니다 util-linux.

rename 'file1' 'newfile' file1*

이것은 당신이 설명하는 것을 할 것입니다. 세 가지 매개변수가 필요합니다 rename.

  1. 파일 이름에서 찾아야 할 사항
  2. 대신 무엇을 사용해야 할까요?
  3. 처리할 파일 마스크

빠른 검색을 했는데 rename이것이 첫 번째 히트 사례였습니다.http://linux.icydog.net/rename.php

고쳐 쓰다시스템에 존재하지 않지만 rename존재하는 경우 bash다음과 같이 일괄 이름 바꾸기를 수행할 수 있습니다. 이는 rename위에 제공된 것과 동일합니다.

for f in file1*; do mv -v "$f" "${f/file1/newfile}"; done

답변2

노력하다:

for f in ./file1.*; do
  echo mv "$f" "newfile.${f##*.}"
done

이 코드는 mv 명령의 내용만 표시합니다. 이것이 원하는 것이라면 echo앞에 있는 mv 명령을 제거하십시오.

답변3

Debian 기반 시스템에서 rename유틸리티는 Perl rename이며 구문은 약간 다릅니다.

rename 's/file1/newfile/' file1*

첫 번째 매개변수는 발견된 각 파일 이름에 적용되는 Perl 표현식입니다.

답변4

GNU를 사용하여 다음을 찾으세요.

find . -maxdepth 1 -name "file1*" -printf "%f\0" | xargs -0 -I {} echo mv -v {} new{}

문제가 없으면 삭제하세요 echo.

관련 정보