[英]Mac OS X Terminal batch rename…but with folder paths
我錯誤地嘗試將我的問題添加到一個非常相似的線程上,並在此處提供良好的解決方案:
我本質上是相同的問題,但是我想這樣做並在重命名時更改文件夾路徑。 這是我問的:
這些解決方案中的任何一種都可以將下划線更改為文件夾路徑嗎? 例如,我在一級上需要嵌套的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.