Как насчет:
# ... getopts processing ...
[[ $1 = "--" ]] && shift
exeparams=("$@")
Отметьте, необходимо использовать массив для содержания параметров. Это правильно обработает любые аргументы, содержащие пробел. Разыменуйте массив с "${exeparams[@]}"
Этот сценарий берет два (дополнительно) аргументы, каталог к разделу и parition размер. Так как Вы не сказали, хотите ли Вы только переместить файлы или переместить все, я предположил, что Вы имели в виду файлы, таким образом, я использовал команду находки.
Несколько комментариев,
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
Только одного цикла for
должно быть достаточно, когда ваше имя файла заканчивается соответствующими цифрами, но оболочка zsh
.
for N in {0..800..20}: do
mkdir "dir$N"
mv "files{$N..$((N+19))}" "/path/to/dir$N/"
done
Если в bash
, то:
for N in {0..800..20}: do
mkdir "dir$N"
eval mv "files{$N..$((N+19))}" "/path/to/dir$N/"
done
Обучающий пост:Как я могу использовать $variable в раскрытии скобок оболочки последовательности?