it-swarm-ko.tech

정규식을 사용하여 Linux에서 파일 이름 바꾸기

일관되게 이름을 바꾸고 싶은 파일 그룹이 있는데 파일 이름은 다음과 같습니다.

"System-Log-01-01-2009-NODATA.txt"
"Something-Log-01-01-2009-NODATA.txt"

그리고 소문자, yyyymmdd, .log 확장자로 원했습니다.

"system.20090101.log"
"something.20090101.log"
9
Osama ALASSIRY

저는 rename 명령을 발견 할 때까지 Perl 스크립트를 작성하여이를 수행했습니다.

이름 바꾸기를 수행하기 위해 Perl 정규식을 허용합니다.

이를 위해 두 개의 명령을 입력했습니다.

rename 's/(\w+)-(\w+)-(\d\d)-(\d{4})-NODATA.txt\$1.$4$3$2.log$//' *
rename 'y/A-Z/a-z/' *.log

하지만 일부 배포판의 경우 rename에는이 기능이 없으며 (맨 페이지 참조) Perl-rename 또는 prename을 설치해야 할 수 있습니다.

14
Osama ALASSIRY

이름 바꾸기 명령이 없기 때문에 이것에 의존하고 있습니다.

for myfile in /my/folder/*; do
    target=$(echo $myfile|sed -e 's/foo/bar/g')
    mv "$myfile" "$target"
done
6
Franz Bettag

rename 유틸리티는 "표준"이 아닙니다. 각 배포판은 다른 rename 도구와 함께 제공됩니다. 예를 들어 여기 Gentoo에서 renamesys-apps/util-linux 패키지에서 왔으며 정규식을 지원하지 않습니다.

Hamish Downer mmv을 제안했습니다. 특히 스크립트 내부에서 사용하기에 유용 해 보입니다.

반면에 일반적인 경우에는 renameutils 를 원할 수 있습니다. 여기에는 qmvqcp 명령이있어 원하는 텍스트 편집기 (내 기본 설정 : Vim)를 열고 대상 파일 이름을 편집 할 수 있습니다. 편집기를 저장하고 닫으면 qmv/qcp 모든 이름 변경이 수행됩니다.

mmvqmv 모두 파일 이름을 올바른 순서로 바꾸고 순환 이름 바꾸기를 감지 할 수있을만큼 똑똑하며 필요한 경우 자동으로 임시 파일을 만듭니다.

4
Denilson Sá Maia

mmv 는 여러 파일을 이동하거나 이름을 바꾸는 표준 Linux 유틸리티입니다. 대부분의 배포에 대한 저장소에서 사용할 수 있습니다. 위의 예에서 다음을 수행 할 수 있습니다.

mmv *-Log-*-*-*-NODATA.txt #l1.#4#3#2.log

자세한 내용은 debaday article 또는 man page 를 읽어보십시오.

4
Hamish Downer

공정하게 :

rename 's/(\w+)-(\w+)-(\d\d)-(\d{4})-NODATA.txt\$1.$4$3$2.log$//' *.txt

이 출력을 제공합니다.

Use of uninitialized value $4 in regexp compilation at (eval 1) line 1.
Use of uninitialized value $3 in regexp compilation at (eval 1) line 1.
Use of uninitialized value $2 in regexp compilation at (eval 1) line 1.

그러나:

rename -n 's/(\w+)-\w+-(\d{2})-(\d{2})-(\d{4})-NODATA\.txt$/$1.$4$3$2\.log/' *.txt && rename 'y/A-Z/a-z/' System.20090101.log

올바른 출력을 제공합니다.

System-Log-01-01-2009-NODATA.txt renamed as System.20090101.log
System.20090101.log renamed as system.20090101.log

{-n} 스위치를 {-v}로 교체

1
fpba

이를 위해 작은 bash 스크립트를 만들었습니다.

#!/bin/bash

for f in `ls /path/to/folder`; do
  # Create new filename from the old one
  # This example replaces A (upper case) with a (lower case)
  new_file=`echo "$new_file" | tr A a`

  # Rename the file
  mv "$f" "$new_file"
done
1
bjarkig82