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 à 0j=$(stat ~/Documents/* --printf "%in" | wc -l )
ceci définit la variablej
à 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 nomsdo if (( (j - ++i) < 8 ))
pour chaque itération de la boucle, testez si le résultat dej
moins le nombre de fois où la boucle a été exécutée est inférieur à 8 et si c'est le cas, alorsmv -v -- "$k" ~/AnotherDirectory
déplacer le fichier dans le nouveau répertoire