Bash
從特定深度移動特定目錄
我試圖製作一個 bash 腳本來幫助我從我的文件夾中移動特定的子文件夾。
問題是,在主文件夾中,
photos
我有這樣命名的文件夾:1
,2
,3
,4
,5
,6
,7
,8
,9
,0
並且在其中的文件夾具有完全相同的名稱重複,然後再次重複相同的文件夾結構。我要移動的子文件夾位於名稱中包含一個字元的最後一個文件夾中。我要移動的子文件夾的名稱中包含 2 個或更多字元。文件夾結構是0-9
//0-9
/0-9
subdir 沒有指定目標文件夾,所以假設它是desktop/photos1
.例子:
photos/0/0/0/23345
photos/1/9/0/12578
如果兩個子目錄具有相同的名稱,例如
photos/0/0/0/23345
,photos/1/1/1/23345
我想重命名其中一個。我在 OSX
- 在具有 GNU coreutils 的系統上(因此不是 OSX 的預設安裝),您可以使用
mv -f --backup=numbered -t /path/to/target photos/*/*/*/*/
這將移動深度 4 下的所有
photos/
子目錄,無論深度 1、2 和 3 的目錄名稱如何。這種方法的優點:重命名只會在需要時進行(如果您只有一個
12578
子文件夾,例如 inphotos/1/9/0/
,則不會重命名)。
- 如果沒有 GNU coreutils,您可以使用這個(有點複雜的)腳本,它將重命名所有子文件夾。例如
photos/1/9/0/12578
將被重命名12578-190
:target=/some/path for i in {0..9}; do for j in {0..9}; do for k in {0..9}; do for dir in "photos/$i/$j/$k/*/"; do mv -- "$dir" "$target/$(basename $dir)-$i$j$k" done done done done