Files
如何將 20 個文件的批次從 1000 個文件的文件夾中遞歸移動到編號的文件夾中
我有一個包含 1000 個(或更多)文件的文件夾。我想要一個腳本來創建一個編號文件夾,然後將前 20 個文件(按名稱排序)移動到該文件夾中。然後它應該對其他文件執行此操作,將文件夾編號增加 1,直到所有文件都在文件夾中。
我嘗試了以下命令,但它不會自動執行整個目錄,也不會自動增加文件夾編號:
N=1000; for i in ${srcdir}/*; do [ $((N--)) = 0 ] && break cp -t "${dstdir}" -- "$i" done
如何使用 bash 來做到這一點?
該腳本有兩個(可選)參數,分區目錄和分區大小。由於您沒有說是只想移動文件還是移動所有內容,所以我假設您的意思是文件,所以我使用了 find 命令。
幾點評論,
- 如果您沒有指定 shell,那麼在 perl、ruby 或 python 中更容易完成類似的操作。
- 使用 maxdepth 1 查找只執行目錄
- 您可以將文件移動到任何地方,只需更改文件夾命名
- 由於使用了 find,您可以添加 -name、-mtime、-ctime 等。
Copysome.sh,
#!/bin/bash path=${1:-"."} #directory to start howmany=${2:-20} #partition size pushd $path; #move there part=1; #starting partition LIST="/usr/bin/find -maxdepth 1 -type f" #move only files? #LIST="ls" #move everything #be careful, $folder will get moved also :-) count=`$LIST |/usr/bin/wc -l`; #count of files to move while [ $count -gt 0 ]; do folder="folder-$part"; if [ ! -d $folder ]; then /usr/bin/mkdir -p $folder; fi /usr/bin/mv `$LIST |/usr/bin/sort |/usr/bin/head -$howmany` $folder/. count=`$LIST |/usr/bin/wc -l`; #are there more files? part=$(expr $part + 1) done popd $path
這是一個要測試的腳本(我周圍沒有額外的 1000 個文件),
for f in 0 1 2 3 4 5 6 7 8 9; do for g in 0 1 2 3 4 5 6 7 8 9; do for h in 0 1 2 3 4 5 6 7 8 9; do touch $f$g$h done done done