2016-08-03 38 views
1

我有圖像文件時,他們創建有這些類型的文件名:如何添加前導零到順序文件名

文件1.JPG的名稱 文件2.JPG的名稱 的名稱file-3.jpg 文件名4.jpg ..etc

這會導致Windows和Cygwin Bash之間的排序問題。當我在Cygwin Bash中處理這些文件時,由於Windows文件系統和Cygwin Bash看到它們之間的分類不同,它們會被無序處理。但是,如果文件被手動重命名並以前導零編號,則此問題不成問題。如何使用Bash自動重命名這些文件,因此我不必手動處理它們。我想在Bash腳本中添加幾行代碼來重命名它們,並在腳本的其餘部分處理它們之前添加前導零。

因爲我在Windows Cygwin和Mac之間互換使用了這個Bash腳本,所以我希望可以的話,在兩種環境中都可以使用。同樣所有文件都會有空格名稱。

+0

是否所有的文件都在同一個文件夾中?還有哪些cygwin(cygcheck.exe -V)和Mac上的bash版本? – sjsam

+1

糟糕,您忘記發佈您的代碼。 StackOverflow是關於幫助人們修復他們的代碼。這不是免費的編碼服務。任何代碼都比沒有代碼更好。我相信我在這裏看到過類似的問題,你是否在尋找解決方案?使用其中的一個,並更新您的Q以指示您遇到問題的位置。祝你好運。 – shellter

回答

1

你可以使用這樣的事情:

files="*.jpg" 
regex="(.*-)(.*)(\.jpg)" 
for f in $files 
do 
    if [[ "$f" =~ $regex ]] 
    then 
     number=`printf %03d ${BASH_REMATCH[2]}` 
     name="${BASH_REMATCH[1]}${number}${BASH_REMATCH[3]}" 
     mv "$f" "${name}" 
    fi 
done 

將在一個腳本中,像rename.sh並運行該文件夾中要隱蔽的文件。根據需要修改......

無恥地從這裏撕開:
Capturing Groups From a Grep RegEx

這裏:
How to Add Leading Zeros to Sequential File Names

+0

非常感謝!奇蹟般有效! –

0
#!/bin/bash 

#cygcheck (cygwin) 2.3.1 
#GNU bash, version 4.3.42(4)-release (i686-pc-cygwin) 

namemodify() 
{ 
bname="${1##*/}" 
dname="${1%/*}" 
mv "$1" "${dname}/00${bname}" # Add any number of leading zeroes. 
} 

export -f namemodify 
find . -type f -iname "*jpg" -exec bash -c 'namemodify "$1"' _ {} \; 

我希望這不會在Mac太:)好運打破

+1

當你有單數字文件名時,這很酷,但是如果你得到像「File-10.jpg」這樣的東西,你將得到一個轉換爲「Name of File-0010.jpg」而不是假定的「 File-010.jpg的名稱「:/ –

相關問題