디렉토리에서 여러 파일을 동시에 이름을 바꾸는 방법 한 가장

디렉토리에 /var/tmp/abc4 개의 파일이 있다고 말합니다 .

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


답변

rename -n 's/(\w+)/XXXXX/' *.csv

-n때 행복을 제거하십시오 .


답변

시험:

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

답변

나는 당신이 게시 한 작은 도전을 좋아했기 때문에 여기 내 해결책이 있습니다. 모든 파일이 5 자리 숫자로 시작한다고 가정하고 cut 명령 을 사용 하여 초기 숫자 파일을 “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

찾고 계십니까? 🙂

참고 문헌 :

bash에서 명령 출력을 통해 반복

bash의 부분 문자열


답변

포크 없음 :

ls | perl -lne '$suf=substr($_,6); rename $_, "XXXXX-$suf"'

쉘 루프를 사용하면 mv파일 당 한 번 분기됩니다. 펄의 rename명령은 그렇지 않습니다.

Perl의 rename 명령에는 몇 가지 제한 사항이 있지만이 경우 이러한 제한 사항이 적용되지 않습니다.

앞에서 rename보여준 명령에 관해서는 그렇습니다.하지만 두 가지 다른 이름 바꾸기 등의 혼란이 있습니다. 당신이 옳은 것을 가지고 있다면 훌륭하지만 그렇지 않으면 이것도 효과가 있습니다.

perl-rename 명령이없고 설치할 수없는 경우 다음을 수행하십시오.

ls | perl -lne '$old=$_; s/(\w+)/XXXXX/; rename $old, $_'

보시다시피, 이것은 최상위 답변에 표시된 것과 동일한 대체를 사용합니다. 물론 펄 이름 바꾸기는 다른 종과 경적을 (상단의 대답은 언급이 -n이미하고있다 -0, -f등), 그리고 더 그들 중 당신이 필요로하는, 더 당신은이 방법으로 자신이 설치 대신 압연한다 .