En bash je dois faire ceci:
prendre tous les fichiers dans un répertoire
copiez-les dans un répertoire existant
Comment puis-je faire cela? J'ai essayé cp -r t1 t2
(t1 et t2 sont des répertoires existants, t1 contient des fichiers) mais il a créé un répertoire appelé t1 dans t2, je ne veux pas cela, j'ai besoin des fichiers dans t1 pour aller directement dans t2. . Comment puis-je faire cela?
Ce que tu veux c'est:
cp -R t1/. t2/
Le point à la fin lui indique de copier le contenu du répertoire en cours, pas le répertoire lui-même. Cette méthode inclut également les fichiers et dossiers cachés.
Si vous voulez copier quelque chose d'un répertoire dans le répertoire actuel, procédez comme suit:
cp dir1/* .
Cela suppose que vous n'essayez pas de copier des fichiers cachés.
cp dir1/* dir2
Ou si vous avez des répertoires à l'intérieur de dir1 que vous voudriez également copier
cp -r dir1/* dir2
En supposant que t1 soit le dossier contenant les fichiers et t2 le répertoire vide. Ce que vous voulez, c'est quelque chose comme ça:
Sudo cp -R t1/* t2/
Gardez à l'esprit que, pour le premier exemple, t1 et t2 doivent être des chemins complets ou des chemins relatifs (en fonction de l'endroit où vous vous trouvez). Si vous le souhaitez, vous pouvez naviguer vers le dossier vide (t2) et procéder ainsi:
Sudo cp -R t1/* ./
Ou vous pouvez naviguer dans le dossier avec les fichiers (t1) et faire ceci:
Sudo cp -R ./* t2/
Remarque: le signe * (ou caractère générique) représente tous les fichiers et dossiers. Le drapeau -R signifie récursivement (tout à l'intérieur de tout).
cp -R t1/ t2
La barre oblique de fin sur le répertoire source modifie légèrement la sémantique, de sorte qu'elle copie le contenu mais pas le répertoire lui-même. Cela évite également les problèmes de fichiers globulants et invisibles de la réponse de Bertrand (copier t1/*
manque les fichiers invisibles, copier 't1/* t1 /.*' copie t1 /. Et t1/.., ce que vous ne faites pas. vouloir).
En fonction de certains détails, vous pourriez avoir besoin de faire quelque chose comme ceci:
r=$(pwd)
case "$TARG" in
/*) p=$r;;
*) p="";;
esac
cd "$SRC" && cp -r . "$p/$TARG"
cd "$r"
... cela change fondamentalement le répertoire SRC et le copie dans la cible, puis revient à votre point de départ.
La difficulté supplémentaire est de gérer des objectifs relatifs ou absolus.
(Cela ne repose pas sur la sémantique subtile de la commande cp
elle-même ... sur la façon dont elle traite les spécifications de source avec ou sans un// final, car je ne suis pas sûr qu'elles soient stables, portables et fiables. au-delà de GNU cp
et je ne sais pas s'ils le resteront à l'avenir).
Pour certains répertoires, ce sera plein car il copiera tout le contenu de "folder1" dans le nouveau répertoire "folder2" à l'intérieur de certains répertoires.
$ (pwd) obtiendra le chemin du répertoire courant.
Notez le point (.) Après folder1 pour obtenir tout le contenu de folder1
cp -r $(pwd)/folder1/. $(pwd)/folder2