簡體   English   中英

Mac OS X Terminal批處理重命名…但具有文件夾路徑

[英]Mac OS X Terminal batch rename…but with folder paths

我錯誤地嘗試將我的問題添加到一個非常相似的線程上,並在此處提供良好的解決方案:

Mac OS X終端批次重命名

我本質上是相同的問題,但是我想這樣做並在重命名時更改文件夾路徑。 這是我問的:

這些解決方案中的任何一種都可以將下划線更改為文件夾路徑嗎? 例如,我在一級上需要嵌套的mbox文件,例如:

TopLevel_NextLevel_mbox
TopLevel_NextLevel_FinalLevel_mbox

我想自動將它們放在如下的層次結構中:

TopLevel/NextLevel/mbox
TopLevel/NextLevel/FinalLevel/mbox

能做到嗎? 當我嘗試用“ /”簡單替換時,我得到了:

fred$ for f in *_mbox; do mv "$f" "${f/_//}"; done
mv: rename TopLevel_NextLevel_mbox to TopLevel/NextLevel_mbox: No such file or directory

看起來它只是試圖將“ /”作為子對象,但由於其中沒有當前文件夾TopLevel w / NextLevel_mbox而感到困惑...

謝謝,弗雷德

進行此工作的基礎從從包含*mbox的當前目錄創建數組的過程開始。 然后,每個數組鍵都包含在下划線之間找到的定界字:

TopLevel_NextLevel_mbox

轉換成這樣的數組:

( TopLevel, NextLevel, mbox )

從那里,我們創建的第一個目錄TopLevel然后執行cd之后mkdir的下一個關鍵-重復這個過程,直到不再有鑰匙。 通過這樣做,每個數組鍵都會創建一個新的嵌套目錄(此外,它還會將所有數據從原始目錄復制到新目錄中,同時保持其結構)。

從原始文件創建嵌套文件夾

#!/bin/bash

DIR=$PWD
for f in *mbox
    do cd $DIR         
    if [[ -d $f ]]; then
        ARR=(${f//_/ }); n=0
        for i in "${ARR[@]}"   
            do echo $n
                if [[ $n -eq 0 ]]; then 
                    mkdir -p $i && cp -R $f/* $i && cd $_
                else
                    mkdir -p $i && cd $_
                fi
            let n++
        done
    fi
done

偽單線

DIR=$PWD; for f in *mbox; do cd $DIR; if [[ -d $f ]]; then ARR=(${f//_/ }); n=0; for i in "${ARR[@]}"; do if [[ $n -eq 0 ]]; then mkdir -p $i && cp -R $f/* $i && cd $_; else mkdir -p $i && cd $_; fi; let n++; done; fi; done

該腳本與上面的腳本完全相同,但是其格式設置為一行。 *該腳本使原始目錄保持不變(我將保留將它們移至OP的練習)。

暫無
暫無

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

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