Možný duplikát:
Jak přesunout 100 souborů ze složky obsahující tisíce?
Je možné kopírovat pouze prvních 1000 souborů z adresáře do jiného?
Díky předem
Následující zkopíruje prvních 1000 souborů nalezených v aktuálním adresáři do $destdir
. Přestože skutečné soubory závisí na výstupu vráceném programem find
.
$ find . -maxdepth 1 -type f |head -1000|xargs cp -t "$destdir"
Budete potřebovat implementaci GNU implementace cp
pro -t
, GNU kompatibilní find
pro -maxdepth
. Také si uvědomte, že předpokládá, že cesty k souborům neobsahují mezery, nový řádek, uvozovky nebo zpětná lomítka (nebo neplatné znaky nebo jsou s některými implementacemi xargs
delší než 255 bajtů).
EDIT: Chcete-li zpracovat názvy souborů s mezerami, novými řádky, uvozovkami atd., Můžete použít řádky zakončené nulovou hodnotou (za předpokladu verze head
, která má -z
možnost):
find . -maxdepth 1 -type f -print0 | head -z -n 1000 | xargs -0 -r -- cp -t "$destdir" --
Čisté řešení Shell (které několikrát volá cp
).
N=1000;
for i in "${srcdir}"/*; do
[ "$((N--))" = 0 ] && break
cp -t "${dstdir}" -- "$i"
done
Zkopíruje se maximální počet $N
soubory z $srcdir
to $dstdir
. Soubory začínající tečkou jsou vynechány. (A pokud vím, neexistuje žádná záruka, že sada vybraných souborů bude dokonce deterministická.)
Následující děsivá 1-liner:
Perl -MFile::Copy -e 'opendir(DIR,$ARGV[0]);$n=1000; (-f $_) && copy($_,"$ARGV[1]/$_") while($n-- && readdir(DIR))
funguje pro soubor obsahující mezery, uvozovky atd., které mají tendenci narušovat řešení založená na prostředí Shell (krátká na $ $ IFS contortions). "Samozřejmě, pokud se vaše názvy souborů chovají, Shell je v pořádku.".
Upravit: přidána kontrola pro kopírování pouze souborů.