Existe-t-il un moyen simple de copier récursivement tous les fichiers cachés d'un répertoire dans un autre répertoire? Je voudrais sauvegarder uniquement tous les fichiers de paramètres dans un répertoire personnel, pas les fichiers normaux. J'ai essayé:
cp -R .* directory
mais il reconnaît .
et ..
copie également récursivement tous les fichiers non masqués. Existe-t-il un moyen pour que cp ignore .
et ..
?
-r
et-R
?Réponses:
Mon préféré pour déplacer les répertoires en général a été:
qui tarit le répertoire courant vers stdout puis le redirige vers un sous-shell qui commence par les cd vers le répertoire de destination avant de décompresser stdin. Simple, direct, extensible - considérez ce qui se passe lorsque vous remplacez le () par un ssh sur une autre machine. Ou pour répondre à votre question, vous pourriez faire:
la source
cd /dest/dir && tar xvf -
. Le&&
vous empêchera d'explorer le répertoire source si vous avez une faute de frappe dans la destination. 2) Vous n'avez besoin que de l'v
indicateur tar sur l'une des commandes tar (ou aucune).(cd /src/dir && tar cf - .) | tar xvf -
Presque chaque fois que cela peut être résolu simplement avec:
Il est assez inhabituel d'avoir un fichier caché qui ne commence pas par l'un de ces caractères.
D'autres correspondances de motifs sont disponibles (
.??*
,.[^.]*
) - voir les commentairesla source
Vous pourriez utiliser
rsync
.qui copiera le contenu du répertoire courant (y compris les fichiers dot, mais pas inclus
..
)la source
.git
répertoires. L'ajout de -C fait cela et ainsi la commande devient:rsync -aC ./ /some/other/directory/
Je vous en supplie, éloignez-vous de l'expansion du shell sur la
cp
ligne de commande - l'expansion du shell a toutes sortes de cas d'angle ahem "intéressants" (récursion indésirable causée par. Et .., espaces, trucs non imprimables, liens durs, liens symboliques, et ainsi de suite.) Utilisez à lafind
place (il vient dans lefindutils
paquet, au cas où vous ne l'auriez pas installé - ce qui serait bizarre, toutes les distributions l'installent par défaut):Explication étape par étape:
Donc, en langage simple, cette
find
ligne de commande dit ceci:la source
J'ai toujours utilisé. ?? * pour trouver des fichiers cachés sans obtenir "." et "..". Il pourrait manquer ".a" ou quelque chose, mais je n'en ai jamais.
la source
De bien meilleures réponses ici; /superuser/61611/how-to-copy-with-cp-to-include-hidden-files-and-hidden-directories-and-their-con
Il décrit par exemple l'utilisation de shopt pour une solution bash native
la source