web-dev-qa-db-fra.com

déplacer des fichiers correspondant à un modèle spécifique

Comment puis-je déplacer des fichiers dans un dossier avec un motif spécifique vers le dossier de destination?

Je souhaite déplacer des fichiers dont le nom se situe dans la plage [00-09] dans la 4ème colonne, séparés par le délimiteur "-".

ls | cut -d "-" -f 4 | grep ^[00-09]

Montre ces fichiers:

UNCID_376947.TCGA-DD-A118-01A-11R-A131-07.110525_UNC12-SN629_0087_BC03HWABXX.7.trimmed.txt
UNCID_377115.TCGA-CC-5263-01A-01R-A131-07.110525_UNC12-SN629_0087_BC03HWABXX.5.trimmed.txt
UNCID_377252.TCGA-DD-A114-11A-12R-A131-07.110525_UNC12-SN629_0087_BC03HWABXX.6.trimmed.txt
3
r.bot

Utilisez une expression globale:

mv your_dir/*?-*?-*?-0[0-9]* new_dir/

Pour le tester, vous pouvez d’abord effectuer un ls your_dir/*?-*?-*?-0[0-9]* pour vous assurer qu’il correspond aux fichiers souhaités.

L’expression *?-*?-*?-0[0-9]* signifie: caractères + - trois fois, puis 0 et n’importe quel caractère.

Tester

$ ls
another_dir/  aa-03A-b  aa-b-03A-b  aa-b-c-03A-b  a-b-c-03A-b  a-b-c-23A-b
$ mv *?-*?-*?-0[0-9]* another_dir/
$ ls another_dir/
aa-b-c-03A-b  a-b-c-03A-b
10
fedorqui

Vous pouvez utiliser un 'for loop':

for FILE in 'file-list'
do
  echo "$FILE"
  mv "$FILE" /your/destination/
done

Explication:

'file-list' doit être remplacé par une méthode pour obtenir la liste des fichiers que vous souhaitez utiliser. Par exemple, $(cat files.txt) si vous avez déjà une liste dans un fichier, pattern* si les fichiers de votre répertoire commencent par le même modèle ou $(find -iname "*pattern*") si vous souhaitez utiliser find pour obtenir la liste.
La sortie sera stockée dans la variable FILEun élément après l’autre. Les commandes entre doet donesont exécutées pour chaque élément. Vous pouvez utiliser echo "$FILE" pour vérifier si votre commande correspond aux bons fichiers avant d'ajouter la commande mvà la boucle.

2
Wayne_Yux