GNU/Linux >> Tutoriels Linux >  >> Linux

fichiers cp uniquement, répertoires ignorés

Je vous suggère d'utiliser rsync au lieu de cp, si vous le pouvez, il a l'option -m qui exclura les dossiers vides, exemple :

rsync -am <origin> <destination>

Explication de la commande dans EXPLAINSHELL.com

J'utilise l'option -a car elle effectue de nombreuses actions par défaut, mais si vous le souhaitez, vous pouvez également utiliser l'option -r, qui définira uniquement le mode récursif.

[AJOUTER un commentaire]

Je ne connais pas de moyen de le faire avec cp, du moins la page de manuel ne montre aucune option qui le fera pour vous. Vous pouvez probablement faire une solution plus complexe en utilisant la commande find pour trouver la liste des fichiers/répertoires à copier, puis la transmettre à cp, mais ce serait beaucoup plus compliqué que rsync. rsync est même à peu près standard dans de nombreux Linux


cp n'a en effet pas d'option pour obtenir uniquement des fichiers, mais comme l'a dit berserck, vous pouvez utiliser find avec cp . En fait, c'est très simple :

# Copy only files
find /path/to/file -type f -execdir cp "{}" /dest/path ";"

Ou :

# Copy everything except directories
find /path/to/file -not -type d -execdir cp "{}" /dest/path ";"

Explication

find est l'outil qui cherchera les fichiers que vous voulez. Dans la première option, nous définissons -type f pour renvoyer uniquement les fichiers normaux. Dans la deuxième option, nous définissons le -not -type d pour obtenir tout sauf les répertoires. find exécute les arguments passés à -execdir remplaçant {} avec une entrée de résultat à la fois et arrête la commande lorsque ; est trouvé (; doit être échappé \; ou ";" , ou le shell pourrait le développer).

-execdir exécutera la commande ayant le dossier du fichier comme "répertoire de travail" et il est préférable au lieu de -exec , vérifiez ci-dessous.

Le -type documentation des options :

-type c

Le fichier est de type c :

b :bloc (tamponné) spécial

c :caractère spécial (non tamponné)

d :répertoire

p :canal nommé (FIFO)

f :fichier normal

l :lien symbolique; ceci n'est jamais vrai si l'option -L ou l'option -follow est active, sauf si le lien symbolique est rompu. Si vous souhaitez rechercher des liens symboliques lorsque -L est activé, utilisez -xtype.

s :socket

D :porte (Solaris)

Le -not documentation des options :

! expression

Vrai si expr est faux. Ce caractère aura également généralement besoin d'être protégé contre l'interprétation par le shell.

-pas expr

Pareil que ! expr, mais non conforme à POSIX.

Le -execdir documentation des options :

-exec commande;

Exécutez la commande ; true si le statut 0 est renvoyé. Tous les arguments suivants à rechercher sont considérés comme des arguments de la commande jusqu'à un argument composé de ';' est rencontré. La chaîne '{}' est remplacée par le nom du fichier en cours de traitement partout où il apparaît dans les arguments de la commande [...]. Ces deux constructions peuvent avoir besoin d'être échappées (avec un '\') ou entre guillemets pour les protéger de l'expansion par le shell. La commande spécifiée est exécutée une fois pour chaque fichier correspondant. La commande est exécutée dans le répertoire de départ. Il existe des problèmes de sécurité inévitables liés à l'utilisation de l'action -exec ; vous devriez utiliser l'option -execdir à la place.

-execdir commande;

Comme -exec, mais la commande spécifiée est exécutée à partir du sous-répertoire contenant le fichier correspondant , qui n'est normalement pas le répertoire dans lequel vous avez commencé la recherche. Il s'agit d'une méthode beaucoup plus sécurisée pour invoquer des commandes, car elle évite les conditions de concurrence lors de la résolution des chemins vers les fichiers correspondants. [...] Si vous utilisez cette option, vous devez vous assurer que votre variable d'environnement $PATH ne fait pas référence à '.'; sinon, un attaquant peut exécuter toutes les commandes de son choix en laissant un fichier nommé de manière appropriée dans un répertoire dans lequel vous exécuterez -execdir. Il en va de même pour les entrées de $PATH qui sont vides ou qui ne sont pas des noms de répertoire absolus.

https://linux.die.net/man/1/find


Linux
  1. Rechercher des fichiers et des répertoires sous Linux avec la commande find

  2. Copier des fichiers et des répertoires sous Linux

  3. Commande pour compresser plusieurs répertoires dans des fichiers Zip individuels ?

  4. Commande Linux :Comment "trouver" uniquement des fichiers texte ?

  5. La commande 'ls -d' n'affiche pas les répertoires. Existe-t-il un moyen d'obtenir que 'ls' affiche uniquement les répertoires au lieu des fichiers et des répertoires?

Comment utiliser la commande cp pour copier des fichiers et des répertoires

Comment renommer des fichiers et des répertoires dans Ubuntu 20.04

4 façons de transférer des fichiers et des répertoires sous Linux

Commande Stat :Afficher les attributs des fichiers et des répertoires

Comment lister uniquement les répertoires sous Linux

Commande ls sous Linux/UNIX