![한 디렉토리에 있는 여러 파일의 이름을 동시에 바꾸는 방법](https://linux55.com/image/153574/%ED%95%9C%20%EB%94%94%EB%A0%89%ED%86%A0%EB%A6%AC%EC%97%90%20%EC%9E%88%EB%8A%94%20%EC%97%AC%EB%9F%AC%20%ED%8C%8C%EC%9D%BC%EC%9D%98%20%EC%9D%B4%EB%A6%84%EC%9D%84%20%EB%8F%99%EC%8B%9C%EC%97%90%20%EB%B0%94%EA%BE%B8%EB%8A%94%20%EB%B0%A9%EB%B2%95.png)
내 디렉터리에는 /var/tmp/abc
4개의 파일이 있습니다.
12345-ram-3e3r5-io9490-89adu9.csv
45434-dam-qwe35-to9490-43adu9.csv
11234-cam-yy3r5-ro9490-85adu9.csv
14423-sam-hh3r5-uo9490-869du9.csv
모든 CSV 파일의 이름을 가장 짧은 방법(아마도 한 줄)으로 바꾸고 싶습니다(모든 파일을 찾아서 이름 바꾸기).
XXXXX-ram-3e3r5-io9490-89adu9.csv
XXXXX-dam-qwe35-to9490-43adu9.csv
XXXXX-cam-yy3r5-ro9490-85adu9.csv
XXXXX-sam-hh3r5-uo9490-869du9.csv
답변1
rename -n 's/(\w+)/XXXXX/' *.csv
만족스러우면 제거하세요 -n
.
답변2
노력하다:
for f in *.csv; do mv -i -- "$f" "XXXXX-${f#*-}"; done
작동 방식:
for f in *.csv; do
그러면 모든 파일에 대해 루프가 시작됩니다
*.csv
.mv -i -- "$f" "XXXXX-${f#*-}"
필요에 따라 파일 이름을 바꾸고 파일을 덮어쓰기 전에 대화식으로 묻습니다.
done
이는 사이클의 끝을 나타냅니다.
예:
$ ls -1
11234-cam-yy3r5-ro9490-85adu9.csv
12345-ram-3e3r5-io9490-89adu9.csv
14423-sam-hh3r5-uo9490-869du9.csv
45434-dam-qwe35-to9490-43adu9.csv
$ for f in *.csv; do mv -i -- "$f" "XXXXX-${f#*-}"; done
$ ls -1
XXXXX-cam-yy3r5-ro9490-85adu9.csv
XXXXX-dam-qwe35-to9490-43adu9.csv
XXXXX-ram-3e3r5-io9490-89adu9.csv
XXXXX-sam-hh3r5-uo9490-869du9.csv
답변3
모든 파일이 5개의 숫자로 시작한다고 가정하므로 다음을 사용하십시오.잘라내기 명령초기 번호 파일을 "XXXXX"로 바꿉니다.
아래는 명령 전의 파일입니다.
-rw-rw-r--. 1 daniel daniel 0 May 13 23:18 11111_bar_file.csv
-rw-rw-r--. 1 daniel daniel 0 May 13 22:54 12345_baz_file.csv
-rw-rw-r--. 1 daniel daniel 0 May 13 22:54 67890_foo_file.xml
아래는 한 줄 명령입니다.
for src in *.csv; do dst=XXXXX$(echo $src| cut -c6-); mv $src $dst; done;
아래는 명령 이후의 파일입니다.
-rw-rw-r--. 1 daniel daniel 0 May 13 22:54 67890_foo_file.xml
-rw-rw-r--. 1 daniel daniel 0 May 13 22:54 XXXXX_bar_file.csv
-rw-rw-r--. 1 daniel daniel 0 May 13 23:18 XXXXX_baz_file.csv
인용하다:
답변4
포크가 없는 경우:
ls | perl -lne '$suf=substr($_,6); rename $_, "XXXXX-$suf"'
쉘 루프를 사용하면 mv
각 파일이 한 번 분기됩니다. Perl rename
명령은 그렇지 않습니다.
(Perl의 이름 바꾸기 명령에는 몇 가지 제한 사항이 있지만 이 특별한 경우에는 적용되지 않습니다.)
앞서 표시된 명령 은 rename
그렇습니다. 작동하지만 두 가지 다른 이름 바꾸기 유형 사이에 혼동이 생길 수 있습니다. 올바른 것이 있으면 좋지만 그렇지 않은 경우에도 효과가 있습니다.
perl-rename 명령이 없고 설치할 수 없는 경우 다음을 수행할 수 있습니다.
ls | perl -lne '$old=$_; s/(\w+)/XXXXX/; rename $old, $_'
보시다시피 이것은 최상위 답변에 표시된 것과 동일한 대체를 사용합니다. 물론 perl-rename에는 다른 부가 기능도 있습니다( -n
상단 답변에서 이미 언급한 다음 -0
, -f
, 등이 있습니다). 더 많이 필요할수록 이 방식으로 스크롤하는 대신 더 많이 설치해야 합니다.