En bash, je dois faire ceci:
prendre tous les fichiers dans un répertoire
les copier 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 à l'intérieur de t2, je ne le veux pas, j'ai besoin que les fichiers de t1 se rendent directement à l'intérieur de t2. Comment puis-je faire cela?
cp
questions peuvent bien être vues comme desbash
questions, qui est un langage de programmation. Je n'ai jamais vu une question Python parler de la copie de fichiers être fermée.Réponses:
Ce que vous voulez c'est:
Le point à la fin lui indique de copier le contenu du répertoire courant, pas le répertoire lui-même. Cette méthode inclut également les fichiers et dossiers cachés.
la source
mv
. Quelqu'un sait-il pourquoi?Si vous souhaitez copier quelque chose d'un répertoire dans le répertoire courant , procédez comme suit:
Cela suppose que vous n'essayez pas de copier des fichiers cachés.
la source
Ou si vous avez des répertoires dans dir1 que vous souhaitez également copier
la source
dir1/.*
n'est pas une bonne idée, car elle copie dir1 / .. (c'est-à-dire le parent du répertoire que vous essayez de copier). Il copie également dir1 /. ce qui est bien, sauf qu'il a déjà (la plupart du temps) été copié, donc vous faites le travail deux fois.dir1/.*
problème des fichiers / cachés en entrant le répertoire dans lequel vous souhaitez copier, puis en vous y référant comme.
. Donc, si vous souhaitez copier tous les fichiers, y compris les fichiers cachés d'un répertoire dans un répertoire existant, vous pouvez:cd [source dir]
,cp . [path to destination dir, with no trailing slash]
.En supposant que t1 est le dossier contenant des fichiers et t2 est le répertoire vide. Ce que vous voulez, c'est quelque chose comme ça:
Gardez à l'esprit que pour le premier exemple, t1 et t2 doivent être les chemins complets ou les chemins relatifs (en fonction de l'endroit où vous vous trouvez). Si vous le souhaitez, vous pouvez accéder au dossier vide (t2) et procédez comme suit:
Ou vous pouvez accéder au dossier contenant les fichiers (t1) et procédez comme suit:
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).
la source
La barre oblique de fin du 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 globalisation et de fichiers invisibles que la réponse de Bertrand a (la copie
t1/*
manque des fichiers invisibles, la copie de `t1 / * t1 /.* 'copie t1 /. Et t1 / .., ce que vous ne voulez pas).la source
$ mkdir t1
$ mkdir t2
$ touch t1/one
$ touch t1/two
$ touch t1/.three
$ cp -R t1/ t2
$ ls t2/
t1
(désolé, pas de format de code dans les commentaires, version lisible sur pastebin.com/yszSxV6G )Selon certains détails, vous devrez peut-être faire quelque chose comme ceci:
... cela change fondamentalement le répertoire SRC et le copie sur la cible, puis revient à l'endroit où vous avez commencé.
L'agitation supplémentaire consiste à gérer des cibles relatives ou absolues.
(Cela ne s'appuie pas sur une sémantique subtile de la
cp
commande elle-même ... sur la façon dont elle gère les spécifications des sources avec ou sans trailing / ... car je ne suis pas sûr qu'elles soient stables, portables et fiables au-delà de GNUcp
et I Je ne sais pas s'ils continueront de l'être à l'avenir).la source
Pour l'intérieur de certains répertoires, ce sera pleinement utilisé car il copie tout le contenu de "dossier1" dans le nouveau répertoire "dossier2" à l'intérieur de certains répertoires.
$ (pwd) obtiendra le chemin du répertoire courant.
Remarquez le point (.) Après folder1 pour obtenir tout le contenu dans folder1
la source