Directory

根據第一個字元將目錄移動到子目錄中

  • May 21, 2020

我想將目錄移動到另一個位置並按首字母移動到子目錄中。例如: ./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

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