디렉토리에는 다음 파일과 그 이상의 파일이 있습니다.
- 파일 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
.
- 파일 이름에서 찾아야 할 사항
- 대신 무엇을 사용해야 할까요?
- 처리할 파일 마스크
빠른 검색을 했는데 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
.