web-dev-qa-db-fra.com

BASH copie tous les fichiers sauf un

Je voudrais copier tous les fichiers d'un répertoire à l'exception d'un nommé Default.png. Il semble qu'il existe plusieurs façons de procéder. Qu'est-ce qui vous semble le plus efficace?

87
Joe Cannatti

Simple, si src/ ne contient que des fichiers:

find src/ ! -name Default.png -exec cp -t dest/ {} +

Si src/ a des sous-répertoires, cela les omet, mais copie les fichiers à l'intérieur d'eux:

find src/ -type f ! -name Default.png -exec cp -t dest/ {} +

Si src/ a des sous-répertoires, cela ne revient pas dedans:

find src/ -type f -maxdepth 1 ! -name Default.png -exec cp -t dest/ {} +
46
John Kugelman

Devrait être comme suit:

cp -r !(Default.png) /dest

Si vous copiez dans un dossier imbriqué dans le dossier actuel (appelé exemple dans le cas ci-dessous), vous devez également omettre ce répertoire:

cp -r !(Default.png|example) /example
128
Jon

rsync est mon remplacement cp/scp depuis longtemps:

rsync -av from/ to/ --exclude=Default.png

-a, --archive               archive mode; equals -rlptgoD (no -H,-A,-X)
-v, --verbose               increase verbosity
61
matja

Je ferais juste:

cp srcdir/* destdir/ ; rm destdir/Default.png

sauf si les fichiers sont volumineux. Sinon, utilisez par exemple.

find srcdir -type f/ |grep -v Default.png$ |xargs -ILIST cp LIST destdir/
3
nos
cp `ls | grep -v Default.png` destdir
0
Will Hartung