Вы можете скопировать из dir1
в dir2
каждый файл, который существует между 0 - 29108273357520896
довольно легко:
#!/bin/bash
declare -i maxval=29108273357520896
function usage {
cat >&2 << TAG
Copy all files from 'srcdir' to 'tgtdir' with numeric names less than 'maxname'.
Usage: "${0//*\//}" srcdir tgtdir [maxname] (maxname default: $maxval)
TAG
exit 1
}
## test required input
if [ -z "$1" -o -z "$2" ]; then
printf "\n error: insufficient input.\n"
usage
fi
## assign variables
srcdir="$1"
tgtdir="$2"
declare -i maxname="${3:-$maxval}" # default maxval
## validate srcdir
if [ ! -d "$srcdir" ]; then
printf "\n error: source dir does not exist.\n"
usage
fi
## validate or create tgtdir
[ -d "$tgtdir" ] || mkdir -p "$tgtdir"
if [ ! -d "$tgtdir" ]; then
printf "\n error: tgtdir does not exist and cannot be created, check permissions.\n"
usage
fi
## validate maxname
if [ $maxname -gt $maxval ]; then
printf "\n error: invalid 'maxname'. value exceeds maximum allowed: %s\n" "$maxval"
usage
fi
## for 0 - $maxname, check that file exists, if so copy to tgtdir
for ((i=0; i<$maxname; i++)); do
[ -f "$i" ] && cp -a "${srcdir}/${i}" "${tgtdir}"
done
exit 0
Как однострочника в директории с файлами
for ((i=0; i<29108273357520896; i++)); do [ -f "$i" ] && cp -a "$i" "/path/to/new/dir"; done
Не делать это с глотанием. Используйте 'if [[$ filename <$ limit]]'. – Barmar
BTW, помещая миллион файлов в один каталог, как правило, не является хорошей идеей. Файловые системы Unix обычно не подходят для таких огромных каталогов. – Barmar
Хорошо, я попробую, если. Что вы говорите, я должен иметь несколько подкаталогов и разбивать миллионы файлов в subdir? – Purpamine