2017-01-16 172 views
2

我正在運行macOS並尋找快速排序數千個jpg文件的方法。我需要根據部分文件名創建文件夾,然後將這些文件移入文件夾。mac OS - 根據文件名的一部分創建文件夾

簡單地說,我希望把這些文件:

x_not_relevant_part_of_name.jpg 
x_not_relevant_part_of_name.jpg 

y_not_relevant_part_of_name.jpg 
y_not_relevant_part_of_name.jpg 

到這些文件夾:

x 
y 

記住「x」和那長「Y」名稱的一部分可能會有所不同。

在maxOS中是否有自動解決方案? 我試過使用Automator和終端,但我不是一個程序員,所以我沒有做好。

回答

2

使用find與終端的bash參數替換可能會工作:

find . -type f -name "*jpg" -maxdepth 1 -exec bash -c 'mkdir -p "${0%%_*}"' {} \; \ 
-exec bash -c 'mv "$0" "${0%%_*}"' {} \; 

它使用bash的參數替換與find遞歸創建目錄(如果它們不存在)使用任何文件名的前綴匹配jpg。它取第一個下劃線(_)之前的字符,然後將匹配的文件移動到相應的目錄中。要使用命令cd進入您想要組織的目錄。請記住,不使用maxdepth選項多次運行該命令可以生成更多的文件夾;使用maxdepth選項限制命令可以運行的「深度」。

${parameter%word} 
${parameter%%word} 

word被擴展,以產生一個模式,就像在文件名擴展。如果模式與擴展的參數值 的尾部分相匹配,則擴展結果是具有最短匹配模式('%'情況)或最長匹配模式('%%')的參數 的值'案例)刪除。

↳GNU擊:Shell Parameter Expansion

+1

工程就像一個魅力!既然你已經爲我節省了幾個小時的重新命名,我給你買了一瓶啤酒。先生非常感謝您。 – Adam

3

我將文件備份第一個安全的地方,以防它一切都錯了。然後,我會安裝homebrew,然後安裝rename有:

brew install rename 

然後,你可以做你想做這個東西:

rename --dry-run -p 's|(^[^_]*)|$1/$1|' *.jpg 

如果正確無誤,請刪除--dry-run並重新運行。

讓我們來看看這個命令。

  • --dry-Run表示剛剛說什麼命令將無需實際做任何事情

  • -p手段創造必要

  • 的任何中間路徑(即目錄)做| ...|」我會稍後解釋

  • * .jpg表示在所有JPG文件上運行命令。

在單引號有趣位實際上是一個替代,以最簡單的形式,它是s|a|b|這意味着替代的東西ab。在這種情況下,a是插入符號(^),這意味着文件名的起始,然後[^_]*表示任何數目的不是下劃線的東西。正如我用圓括號括起來的那樣,我可以在b部分回參考$1,因爲它是a括號中的第一個。 b部分意味着「無論是在下劃線之前」後跟一個斜槓和「無論再次在下劃線之前」

+0

嘿!您的解決方案也可以,但@L'L的解決方案無需安裝額外的「軟件」。先生非常感謝您! – Adam

+0

Wot?沒有啤酒? ;-)很酷,很高興它適合你。 –

+1

@MarkSetchell: –

相關問題