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?
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?
Réponses:
Simple, s'il 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 les réintègre pas:
find src/ -type f -maxdepth 1 ! -name Default.png -exec cp -t dest/ {} +
\;
exécute la commande une fois par fichier. +
exécute la commande une fois et lui transmet tous les noms de fichiers à la fois (sous réserve de la limite de longueur de la ligne de commande). +
est un peu plus efficace en général.
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
shopt -s extglob
de fonctionner, s'il a été désactivé.
shopt -s extglob
comme décrit par @BarryKelly. Avec cela, cela fonctionne parfaitement.
!()
... Magnifique! Pour ceux qui - comme moi - estiment qu'il est temps d'étudier / revoir bash , voici les liens pertinents liés à cette question / réponse: shopt / extglob et le modèle .
rsync a été mon remplaçant 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
-r
argument si vous synchronisez des répertoires
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/
Default.png
existe dans les deux répertoires, il remplacera celui dans destdir
par celui dans srcdir
, puis supprimera le copié Default.png
. Au lieu de cela, l'OP souhaite conserver le Default.png
qui existe déjà destdir
.
Cela fonctionne très bien pour tout copier sauf les modules de nœuds :) profitez-en et grâce aux réponses ci-dessus, je viens de l'ajouter. Rsync est meilleur à mon avis que CP car vous pouvez voir la barre de progression sans la demander.
rsync -av fromDirectory/ ToDirectory/ --exclude=node_modules
cp `ls | grep -v Default.png` destdir
# chattr +i /files_to_exclude
# cp source destination
# chattr -i /files_to_exclude
utiliser le paramètre d'expansion du shell avec regex
cp /<path>/[^not_to_copy_file]* .
Tout sera copié à l'exception du not_to_copy_file
- si quelque chose ne va pas avec cela. veuillez préciser !
[...]
) contient un ensemble de caractères à faire correspondre, tandis qu'un début ^
provoquera une correspondance du complément des caractères répertoriés. Dans l'exemple suivant, aucun fichier ne sera répertorié: touch not_to_copy_file to_copy_file ; ls [^not_to_copy_file]*
parce que tous les noms de fichiers commençant par l' un des caractères suivants seront exclus: _cefilnopty
.