일관되게 이름을 바꾸고 싶은 파일 그룹이 있었고 파일 이름은 다음과 같습니다.
"System-Log-01-01-2009-NODATA.txt"
"Something-Log-01-01-2009-NODATA.txt"
그리고 나는 그것들을 소문자, yyyymmdd, .log 확장자로 원했습니다.
"system.20090101.log"
"something.20090101.log"
일관되게 이름을 바꾸고 싶은 파일 그룹이 있었고 파일 이름은 다음과 같습니다.
"System-Log-01-01-2009-NODATA.txt"
"Something-Log-01-01-2009-NODATA.txt"
그리고 나는 그것들을 소문자, yyyymmdd, .log 확장자로 원했습니다.
"system.20090101.log"
"something.20090101.log"
답변:
rename 명령을 발견 할 때까지 펄 스크립트를 작성했습니다.
이름을 변경하기 위해 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
.
mmv
만 결국 덕분 rename
에 정규 표현식의 힘을 사용할 수 있습니다
perl-rename
.
mmv 는 여러 파일을 이동 / 이름 바꾸기하는 표준 Linux 유틸리티입니다. 대부분의 배포판에서 repos에서 사용할 수 있습니다. 위의 예에서 다음을 수행 할 수 있습니다.
mmv *-Log-*-*-*-NODATA.txt #l1.#4#3#2.log
자세한 내용은이 debaday 기사 또는 매뉴얼 페이지를 참조하십시오 .
rename
util은 "표준"이 아닙니다. 각 배포판은 다른 rename
도구 와 함께 제공됩니다 . 예를 들어, 여기 Gentoo에서는 패키지 rename
에서 sys-apps/util-linux
왔으며 정규 표현식을 지원하지 않습니다.
Hamish Downer 는 mmv
특히 스크립트 내에서 사용하기에 유용하다고 생각합니다.
반면에 일반적인 경우에는 renameutils를 원할 수 있습니다 . 그것은 당신이 선택한 텍스트 편집기 (내 환경 설정 : Vim)를 열고 거기에서 대상 파일 이름을 편집 할 수있는 명령 qmv
과 qcp
명령을 가지고 있습니다. 편집기를 저장하고 닫은 후 qmv
/ qcp
는 모든 이름 변경을 수행합니다.
모두 mmv
와 qmv
원형 이름 변경을 감지하는 것이 올바른 순서로 파일의 이름을 변경하는 스마트 충분하고 필요한 경우 자동으로 임시 파일을 만들 것입니다.
sys-apps/rename
패키지 를 사용할 수 있습니다.이 패키지 renamexm
는 정규식 이름 바꾸기뿐만 아니라 대량 대문자 / 소문자 및 기타 좋은 것들을 제공합니다.
공정하게 :
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}로 교체
이를 위해 작은 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