it-swarm-eu.dev

Zkopírujte prvních n souborů do jiného adresáře

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

44
chchrist

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" --
63
onur güngör

Č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á.)

2

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ů.

0
Alien Life Form