GNU/Linux >> Tutoriels Linux >  >> Ubuntu

Déplacer uniquement les 8 derniers fichiers d'un répertoire vers un autre répertoire ?

J'essaie de déplacer les 8 derniers fichiers de Documents répertoire vers un autre répertoire, mais je ne veux pas les déplacer un par un vers ce répertoire spécifique. Est-il possible de les déplacer avec un substitut de la tail commande, mais pour des répertoires au lieu de fichiers ? Je veux dire que j'aimerais le faire avec quelque chose comme tail -8 ./Documents | mv ./Anotherdirectory ou avec mv tail -8 ./Documents ./Anotherdirectory .

En fait, je cherche un moyen astucieux de déplacer les 8 derniers fichiers (comme indiqué dans ls ) rapidement (sans taper chaque nom) dans l'autre répertoire. Des suggestions ?

Réponse acceptée :

Vous pouvez utiliser for , qui parcourt les fichiers de manière ordonnée et nous permet d'éviter d'analyser la sortie de find ou ls , pour éviter les problèmes d'espaces et d'autres caractères spéciaux dans les noms de fichiers. Un grand merci à @muru pour avoir amélioré cela 🙂

i=0; j=$(stat ~/Documents/* --printf "%in" | wc -l); for k in ~/Documents/*; do if (( (j - ++i) < 8 )); then echo mv -v "$k" ~/AnotherDirectory; fi; done 

Testez-le d'abord avec echo , puis supprimez echo pour déplacer réellement les fichiers.

En tant que script :

#!/bin/bash
i=0
j=$(stat ~/Documents/* --printf "%in" | wc -l )
for k in ~/Documents/*; do
  if (( (j - ++i) < 8 )); then
    echo mv -v -- "$k" ~/AnotherDirectory
  fi
done

encore une fois, supprimez echo après avoir testé pour déplacer les fichiers pour de vrai

Explication

  • i=0 dire au shell de commencer l'itération à 0
  • j=$(stat ~/Documents/* --printf "%in" | wc -l ) ceci définit la variable j à un entier égal au nombre total de fichiers dans le répertoire. Grâce à la réponse de Serg à ma propre question sur la façon de compter les fichiers de manière fiable, quels que soient les caractères contenus dans leurs noms
  • do if (( (j - ++i) < 8 )) pour chaque itération de la boucle, testez si le résultat de j moins le nombre de fois où la boucle a été exécutée est inférieur à 8 et si c'est le cas, alors
  • mv -v -- "$k" ~/AnotherDirectory déplacer le fichier dans le nouveau répertoire

Ubuntu
  1. Comptez les lignes de tous les fichiers du répertoire Ubuntu

  2. Compter le nombre de fichiers dans un répertoire en utilisant C

  3. Comment déplacer (et écraser) tous les fichiers d'un répertoire à un autre ?

  4. Supprimer uniquement les fichiers dans le répertoire sous linux PAS les répertoires

  5. Comment lister (ls) les 5 derniers fichiers modifiés dans un répertoire ?

Comment déplacer le répertoire de données MySQL ?

Comment déplacer des fichiers d'un compte utilisateur à un autre sur le même ordinateur ?

Mystérieux .répertoires dans le répertoire personnel ?

Comment déplacer des fichiers vers un autre dossier à l'aide du gestionnaire de fichiers

Comment copier les 10 fichiers les plus récents d'un répertoire à un autre ?

Grep dans un énorme fichier journal (> 14 Go) uniquement les derniers x Go ?