GNU/Linux >> Tutoriels Linux >  >> Linux

Déplacer des fichiers en lisant leurs noms de fichiers vers différents répertoires ?

Je dois déplacer des fichiers en lisant leurs noms.
Je dois déplacer des fichiers générés par le système et les noms incluent un horodatage. Je dois déplacer les fichiers en lisant le nom du fichier par mois.

Si le nom du fichier contient 201601*.txt , puis passez à 2016/January annuaire. Si le nom du fichier contient 201602*.txt puis passez à 2016/February répertoire etc.

Réponse acceptée :

Eh bien, si les chaînes de date sont dans les noms de fichiers et que tous les fichiers sont dans le même répertoire, vous pouvez faire :

mv 201601*.txt 2016/January

Faire cela 12 fois manuellement serait pénible, donc je créerais une liste avec le numéro et le nom du mois correspondant :

$ paste <(printf '%sn' {01..12}) <(cal 2016 | grep -Po 's+K[A-Z]w{2,}') 
01  January
02  February
03  March
04  April
05  May
06  June
07  July
08  August
09  September
10  October
11  November
12  December

Et puis analysez-le pour construire le mv commandes :

$ paste <(printf '%sn' {01..12}) <(cal 2016 | grep -Po 's+K[A-Z]w{2,}') | 
    while read num month; do echo mv "*2016$num*" 2016/"$month"; done
mv *201601* 2016/January
mv *201602* 2016/February
mv *201603* 2016/March
mv *201604* 2016/April
mv *201605* 2016/May
mv *201606* 2016/June
mv *201607* 2016/July
mv *201608* 2016/August
mv *201609* 2016/September
mv *201610* 2016/October
mv *201611* 2016/November
mv *201612* 2016/December

Une fois que vous êtes sûr que cela fait ce dont vous avez besoin, supprimez le echo pour déplacer réellement les fichiers :

paste <(printf '%sn' {01..12}) <(cal 2016 | grep -Po 's+K[A-Z]w{2,}') | 
    while read num month; do echo mv "*2016$num*" 2016/"$month"; done

Explication

Le grep -Po 's+K[A-Z]w{2,}') lancera grep avec les expressions régulières compatibles Perl (-P ) et n'imprimera que la ou les parties correspondantes de chaque ligne (-o ). L'expression régulière utilisée recherchera un ou plusieurs caractères blancs (s+ ) suivi d'une majuscule ([A-Z] ) et 2 caractères de mot ou plus (w{2,} ). Le K signifie "tout ignorer avant cela", ce qui entraînera la commande à n'imprimer que la partie des chaînes correspondantes après l'espace blanc. Le tout imprime simplement la liste des mois.


Linux
  1. Comment tar (compresser) des fichiers, en excluant certains fichiers ou répertoires

  2. Comment déplacer 100 fichiers d'un dossier en contenant des milliers ?

  3. Supprimer les fichiers et les répertoires par leurs noms. Aucun fichier ou répertoire de ce nom?

  4. Comparer les répertoires mais pas le contenu des fichiers ?

  5. Makefiles avec des fichiers source dans différents répertoires

Commande Ls sous Linux (liste des fichiers et des répertoires)

Comment copier des fichiers et des répertoires sous Linux

Comment déplacer des fichiers et des répertoires sous Linux (commande mv)

Comment copier des fichiers et des répertoires dans un terminal Linux

Commande Stat :Afficher les attributs des fichiers et des répertoires

Lecture du fichier Rdata avec un encodage différent