Directory
根據第一個字元將目錄移動到子目錄中
我想將目錄移動到另一個位置並按首字母移動到子目錄中。例如: ./alpha 將移動到 /otherdir/a/ ./beta 將移動到 /otherdir/b/ 所有子目錄都已創建並且它是一個固定集,因此我無需擔心檢查或創建這些子目錄。我希望使用 的輸出
find . -type d -name "[a-z*]"
,當我執行時find . -type d -name "[a-z*]" | xargs mv -t /dest/
,所有目錄都會被移動,但當然不會移動到子目錄中。我不知道是否可以為/dest/first character here/
組件使用第二個參數,傳遞每個目錄名稱的第一個字元。有沒有辦法做到這一點,或者有不同的方法來a)生成目錄列表和b)將目錄名稱和第一個字元傳遞給移動命令?
您需要拿起目錄的第一個字母。
find
通過循環執行輸出很容易做到這一點。例如,for i in $(find . -type d -name "[a-z]*") do echo ${i:2:1} done
此命令為您提供每個目錄的第一個字母,忽略前導
./
. 要將其移動到目的地,您必須將目錄放在其他位置(目前目錄之上)以避免遞歸移動。假設您的目標目錄位於../dest/a
、../dest/b
等中。您可以將echo
命令替換為mv
,上面的循環可以變成destination="../dest" for i in $(find . -type d -name "[a-z]*") do mv ${i} ${destination}/${i:2:1} done
您必鬚根據目的地進行調整。
沒有使用的理由
find
(除非目錄的數量很大)。dest_root='/otherdir' for dir in [a-z]*; do [ -d "${dir}" ] && mv "${dir}" "${dest_root}/${dir:0:1}" done