Comment copier tous les fichiers d'un répertoire à un autre dans un script bash
Je veux copier tous les fichiers d'un répertoire dans un autre répertoire sans copier le dossier d'origine. Dans un terminal, je voudrais juste faire ceci:
cp -r dir1/* dir2
et puis dir2 contiendra tous les fichiers à partir dir1 sans contenant dir1 lui-même. Je suis en train d'essayer de reproduire cela dans un script bash et j'obtiens une erreur. Voici mon code bash:
cp -r $pck_dir"/*" $TAR_DIR"/pck/"
J'obtiens cette erreur:
cp: cannot stat ‘./mailman/lists/mailman/*’: No such file or directory
C'est étrange car j'ai pu vérifier que le répertoire en question existe. Je crois que bash est de se plaindre de la '*', mais je ne suis pas sûr pourquoi. Quelqu'un peut-il m'éclairer sur ce que je fais de mal?
source d'informationauteur user3361761
Vous devez vous connecter pour publier un commentaire.
Expansion sur devnull commentaire:
Citations de tout type autour d'un générique, comme
*
permettra d'éviter la coquille de l'expansion de celui-ci. Ainsi, vous ne devriez écrire"/*"
si vous voulez une barre oblique suivie par un littéral étoiles.Non coté variable sera soumis à couper un mot. Donc, si pck_dir avait la valeur
my dir
puis$pck_dir"/*"
serait étendu à deux motsmy
etdir/*
et les deux mots serait passé àcp
que séparer les arguments. Sauf si vous voulez couper un mot, shell variables doivent toujours être entre guillemets doubles.Ainsi, pour obtenir ce que vous voulez, utilisez:
Utiliser rsync ligne de commande à la place.
rsync -auv dir1/dir2/
permettra de synchroniser de manière récursive tous les fichiers du dossier dir1 dans le dossier dir2.
homme rsync
pour obtenir plus d'explication pour savoir comment utiliser ce système comand ligne.