Bash

從特定深度移動特定目錄

  • September 7, 2020

我試圖製作一個 bash 腳本來幫助我從我的文件夾中移動特定的子文件夾。

問題是,在主文件夾中,photos我有這樣命名的文件夾: 1, 2, 3, 4, 5, 6, 7, 8, 9,0並且在其中的文件夾具有完全相同的名稱重複,然後再次重複相同的文件夾結構。我要移動的子文件夾位於名稱中包含一個字元的最後一個文件夾中。我要移動的子文件夾的名稱中包含 2 個或更多字元。文件夾結構是0-9// 0-9/ 0-9subdir 沒有指定目標文件夾,所以假設它是desktop/photos1.

例子:photos/0/0/0/23345 photos/1/9/0/12578

如果兩個子目錄具有相同的名稱,例如photos/0/0/0/23345photos/1/1/1/23345我想重命名其中一個。我在 OSX

  • 在具有 GNU coreutils 的系統上(因此不是 OSX 的預設安裝),您可以使用
mv -f --backup=numbered -t /path/to/target photos/*/*/*/*/

這將移動深度 4 下的所有photos/子目錄,無論深度 1、2 和 3 的目錄名稱如何。

這種方法的優點:重命名只會在需要時進行(如果您只有一個12578子文件夾,例如 in photos/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

引用自:https://unix.stackexchange.com/questions/270452