여러 파일의 이름을 바꾸지만 제목의 일부만 변경합니다.

여러 파일의 이름을 바꾸지만 제목의 일부만 변경합니다.

여러 파일(약 167k)의 이름을 바꾸고 각 파일의 제목 중 일부만 바꿔야 합니다. 시작: Aaaa.bb - 2 tag tag_tag 9tag Aaaa.bb - 125 tag_tag 9tag Aaaa.bb - 3567 tag 9tag 끝: Aaaa.bb - 000002 tag tag_tag 9tag Aaaa.bb - 000125 tag_tag 9tag Aaaa.bb - 003567 tag 9tag 모든 것이 외장 HDD에 있습니다. 이 상황에서 도움이 될 수 있는 도구나 스크립트가 있습니까? 또한 제가 아직 우분투와 그 모든 까다로운 작업을 처음 접한다는 사실을 언급하는 것을 잊어버렸으므로 답변을 단순화하도록 요청하겠습니다.

답변1

bash, awk및 을 사용하여 이에 대해 설명합니다 mv.

awk 관점에서 파일 이름을 살펴보면, filename은 공백으로 구분된 필드가 있는 문자열일 뿐이며, 특히 관심을 끄는 필드는 0으로 채워져야 하는 $3 필드입니다. 아래 스크립트가 바로 그 일을 합니다. 이름을 바꾸려는 파일과 동일한 디렉터리에 스크립트를 배치하고 실행해야 합니다. 또한 다음을 사용하여 실행 가능한지 확인하십시오.chmod 755 renamerScript.sh

데모

testdir:$ ls
Aaaa.bb - 125 tag tag_tag 9tag  Aaaa.bb - 2 tag tag_tag 9tag  Aaaa.bb - 4207 tag tag_tag 9tag  BACKUP/  renamerScript.sh*

testdir:$ ./renamerScript.sh                                                                                                                          
mkdir: cannot create directory ‘BACKUP’: File exists
cp: omitting directory ‘BACKUP’
renaming Aaaa.bb - 125 tag tag_tag 9tag to Aaaa.bb - 000125 tag tag_tag 9tag 
renaming Aaaa.bb - 2 tag tag_tag 9tag to Aaaa.bb - 000002 tag tag_tag 9tag 
renaming Aaaa.bb - 4207 tag tag_tag 9tag to Aaaa.bb - 004207 tag tag_tag 9tag 

testdir:$ ls
Aaaa.bb - 000002 tag tag_tag 9tag  Aaaa.bb - 000125 tag tag_tag 9tag  Aaaa.bb - 004207 tag tag_tag 9tag  BACKUP/  renamerScript.sh*

스크립트

#!/bin/bash
# renamerScript.sh
# Author: Serg Kolo
# Date: Oct 17, 2015
# Purpose : renaming specific files
# Written for: http://askubuntu.com/q/686794/295286

# Make sure you have backup of the files !!!
# comment/uncomment if you do want to do a backup

mkdir BACKUP
cp -t BACKUP *

# This is where the magic happens:
# If we look at filenames from the awk point of view
# "Aaaa.bb - 2 tag tag_tag 9tag" are all really 
# space-separated fields. Field #3 is the one we need to edit.
# What we can do is pad it with zeros and then chop off 6 
# characters from the end, and store that as new filename
# The rest is just doing mv command from old filename to new
# And also making sure we're operating on files , not directories
# and not renaming the script file,too

for FILENAME in * ; 
do  
 if [ -f "$FILENAME" -a "$FILENAME" != "renamerScript.sh" ]; then

   OLDFILENAME="$FILENAME"
   NEWFILENAME=$(echo "$FILENAME" | awk '{$3="00000"$3; len=(length($3)-5); $3=(substr($3,len)); print  }')
   printf "renaming $OLDFILENAME to $NEWFILENAME \n"
   mv "$OLDFILENAME" "$NEWFILENAME"
 fi
done 

답변2

Python을 사용하고 정규식을 사용하는 것이 좋습니다. 다음은 폴더와 하위 폴더의 모든 파일을 제어할 수 있는 스크립트의 예입니다.

directoryChosen = (sys.argv[1])

print directoryChosen + "   thi is inside dollartohash"
if os.path.isdir(directoryChosen):
    for n in os.listdir(directoryChosen):
        if not n.startswith('.'):

            newname =  n.replace('$', '#')
            print newname
            if newname != n:
                path = os.path.join(directoryChosen, n)
                print path + "    this is path"
                target = os.path.join(directoryChosen, newname)
                print target + "   this is target"
                os.rename(path, target)

    newdir = directoryChosen.replace('$', '#')
    print newdir
    if directoryChosen != newdir :
         os.rename(directoryChosen, newdir)

보시다시피 디렉터리를 인수로 사용하고 기호를 다른 기호로 변경합니다. 교체 부품을 수정할 수 있다고 확신합니다.

답변3

Perl 기반 rename명령을 사용하여 원하는 형식과 필드 너비로 공백-하이픈-공백 뒤에 오는 일련의 숫자를 다시 인쇄 할 수 있습니다.

rename -vn -- 's/ - (\d+)/sprintf " - %06d", $1/e' *

(-n 플래그는 '작동 없음'을 의미합니다. 즉, 표현식을 테스트하기 위해 연습 실행만 수행합니다. 올바르게 작동한다고 확신하는 경우 이를 제거하십시오.)

답변4

노력하다pyRenamer패턴, 대체를 사용하여 파일 이름을 바꾸거나 텍스트를 삽입 또는 삭제하거나 수동으로 파일 이름을 바꾸는 대량 파일 이름 바꾸기 프로그램입니다.

다음과 같은 기능을 갖춘 GUI 창이 있습니다.

  • 파일 이름을 바꾸는 패턴. 파일 이름을 바꾸려면 검색하고 바꾸세요. 파일 이름의 아무 곳에나 문자를 삽입하고 삭제합니다. 대문자 사용(파일 이름을 대문자로 만듭니다). 일반적인 대체. 선택한 파일의 이름을 수동으로 바꿉니다. 메타데이터를 사용하여 이미지 이름을 바꿉니다. 메타데이터를 사용하여 음악의 이름을 바꿉니다.원천

설치하다:sudo apt-get install pyrenamer

관련 정보