簡體   English   中英

遍歷文件夾並使用文件夾名稱順序重命名每個文件夾中的所有文件

[英]Looping through folders and renaming all files in each folder sequentially with folder name

我有一系列子文件夾,每個子文件夾上都有圖像。

結構看起來像

/stuff/
   IMG_012.JPG
   IMG_013.JPG
   IMG_014.JPG

/morestuff/
   IMG_022.JPG
   IMG_023.JPG
   IMG_024.JPG

我想在我的mac終端上編寫一個腳本,以遍歷每個文件夾並依次重命名圖像,包括文件夾名稱。 因此,上述結構如下所示:

/stuff/
   stuff_1.JPG
   stuff_2.JPG
   stuff_3.JPG

/morestuff/
   morestuff_1.JPG
   morestuff_1.JPG
   morestuff_1.JPG

我原本嘗試創建Automator工作流程並使用變量,但是很難將文件夾名稱分配為變量並使循環正常工作。

我希望終端提供一個優雅的解決方案。

有任何想法嗎?

這應該對您來說很好。 將其保存為HOME目錄中的“ RenameImages”,然后使其可執行,如下所示:

cd
chmod +x RenameImages

然后,您可以在每個目錄( -type d )上運行它( -exec ),如下所示:

find . -type d -exec ./RenameImages {} \;

這是腳本:

#!/bin/bash
# Ignore case, i.e. process *.JPG and *.jpg
shopt -s nocaseglob
shopt -s nullglob

# Go to where the user says
echo Processing directory $1
cd "$1" || exit 1

# Get last part of directory name
here=$(pwd)
dir=${here/*\//}
i=1
for image in *.JPG 
do
   echo mv "$image" "${dir}${i}.jpg"
   ((i++))
done

目前,除了向您展示其功能之外,它什么也沒做。 如果您喜歡它的功能,只需從第三行刪除echo一詞,然后再次運行即可。

因為您提到您嘗試使用Automator,所以我想拋出另一種方法來執行此操作。 此文件搜索和處理軟件: http : //www.softpedia.com/get/File-managers/JFileProcessor.shtml https://github.com/stant/jfileprocessor

將允許您使用名稱,大小,日期,X或所有深度的子文件夾中的glob或regex搜索文件。 您可以保存到“列表”窗口或文件。 然后,您可以運行一個groovy(思考Java)腳本來對文件列表執行任何操作。 壓縮或壓縮它們,修改列表字符串,如sed,刪除,移動,復制文件,grep或ls -l它們,等等。 在您的情況下,您可以修改現有的常規示例以執行以下操作:

    int numItems = defaultComboBoxModel.getSize();
    System.out.println( "defaultComboBoxModel.getSize() num of items =" + numItems + "=" );
    String str = "";
    for( int i = 0; i < numItems; i++ )
        {
        str = defaultComboBoxModel.getElementAt( i ).toString();
        System.out.println( "file of index =" + i + "   str =" + str + "=" );

            String cmd = "mv " + str + " " + i + ".jpg";  // or whatever
            def list = cmd.execute().text   // this stuff just captures output and write to a log file
            list.eachLine{
                outFile << it;
                }
            outFile << System.getProperty("line.separator") + "-------------------------------------" + System.getProperty("line.separator");
        }

它還可以讓您按摩列表,例如添加到列表,從列表中刪除,從另一個列表中減去一個列表。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM