À la ligne de commande Linux, j'aimerais copier un ensemble (très important) de fichiers .txt
d'un répertoire (et de ses sous-répertoires) vers un autre.
J'ai besoin de la structure du répertoire pour rester intact, et je dois ignorer les fichiers sauf ceux qui se terminent par .txt
.
Vous pouvez utiliser find and cpio pour le faire
cd /top/level/to/copy find . -name '*.txt' | cpio -pdm /path/to/destdir (-updm for overwrite destination content.)
cd /source/path find -type f -name \*.txt -exec install -D {} /dest/path/{} \;
Qu'en est-il de vous d'abord le copier avec
cp -r /old/folder /new/folder
Puis accédez au nouveau dossier et exécutez
find . -type f ! -iname "*.txt" -delete
ou juste
cp -r /old/folder /new/folder && find . -type f ! -iname "*.txt" -delete
Edit: ok, vous voulez une commande qui filtre (je n'ai pas testé ceci car mon système n'a pas la commande cpio
!). Voici où je l'ai trouvé: http://www.gnu.org/software/findutils/manual/html_mono/find.html#Copying-A-Subset-of-Files
find . -name "*.txt" | cpio -pmd0 /dest-dir
Testez ceci d'abord, car je ne l'ai pas encore essayé. Si quelqu'un vérifie, ce serait génial.
La manière la plus simple qui a fonctionné pour moi:
cp --parents -R jobs/**/*.xml ./backup/
Une prise est que vous devez naviguer vers le répertoire "souhaité" avant afin que le "chemin parent" soit correct.
Veillez également à ce que vous ayez activé les points de vue récursifs dans bash:
shopt -s globstar
Une autre approche
find . -name '*.txt' -exec rsync -R {} path/to/dext \;
Accédez au répertoire:
cp '*.css' /path/to/destination
Vous devrez naviguer vers chaque dossier du répertoire, mais cela vaut mieux que la plupart des options que j'ai vues jusqu'ici.