重命名一堆文件,但僅重命名部分標題

重命名一堆文件,但僅重命名部分標題

我需要重命名一堆文件(大約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 一切都在外部硬碟中 有沒有任何工具或腳本可以在這種情況下幫助我?還忘了提到我在 ubuntu 和所有那些棘手的東西中還是新手,所以我會要求簡化答案

答案1

這是我的看法,使用bashawk、 和mv

如果我們從 awk 的角度來看文件名,文件名只是一個帶有空格分隔字段的字串,特別感興趣的是字段 $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

嘗試Python重命名器批次文件重命名器,使用模式、替換、插入或刪除文本,甚至手動重命名文件。

它的 GUI 視窗具有以下功能:

  • 重命名檔案的模式。搜尋並取代以重新命名檔案。在檔案名稱中的任意位置插入和刪除字元。大寫(使文件名大寫)。常見替換。手動重新命名選定的檔案。使用影像的元資料重命名影像。使用元資料重命名音樂。來源

安裝:sudo apt-get install pyrenamer

相關內容