我想用來parallel
將許多目錄拆分為子目錄。例如,我有 1 000 000 個包含內容的目錄,但對於一個目錄來說太多了,所以我想在主目錄中建立 10 個目錄,並在每個目錄中移動 100 000 個原始目錄。
我已經嘗試過ls -tr|parallel -n100000 mkdir "dir_{#}"\;mv {} "dir_{#}"
命令,但它只將 ~10 000 移動到一個子目錄中(有時 ~6200,有時 ~12 500)並創建太多子目錄 - 有時比我需要的多 10 倍。當然,我不需要每個子目錄中正好有100 000個目錄,它可以是101 000或98 500個目錄,它應該是100 000範圍內的數字
那麼,我該如何使用 來做到這一點parallel
?
答案1
GNUparallel
解決方案:
parallel -j10 -n100000 --no-notice -k 'mkdir -p dir_{#}; mv {} -t dir_{#}' ::: *
j N
- 職位數。並行運行N
作業。在您的情況下,我們將執行 10 個作業來在新的 10 個父目錄之間指派(移動)所有目錄-n100000
100000
-每個命令列最多使用參數(目錄名){#}
- 要執行的作業的序號。該替換字串將被正在運行的作業的序號替換::: arguments
- 使用arguments
命令列作為輸入來源而不是 stdin(標準輸入)
若要處理按修改時間排序的目錄(目錄名稱) - 使用以下管道:
ls -dtr * | parallel -j10 -n100000 --no-notice -k 'mkdir -p dir_{#}; mv {} -t dir_{#}'