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
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.
$ 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
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 FILE
un élément après l’autre. Les commandes entre do
et done
sont 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.