J'ai des fichiers fileName_1 , fileName_2 ... fileName_100000 où les fileNames sont numérotés séquentiellement. Comment puis-je supprimer les fichiers d'index supérieurs à, disons 100 ?
command-line
teaLeef
la source
la source
{x..y}
à toute la liste. Par exemple, si vous l'utilisez,echo test{1..3}
il sera développéecho test1 test2 test3
puis exécuté. Comme vous pouvez le voir, il s'imprimetest1 test2 test3
. De même, si le{x..y}
n'est connecté à aucun argument, il y mettra simplement les chiffres. Par exemple,echo test {1..3}
il suffit d'imprimertest 1 2 3
.exec
appel au nombre d'arguments qu'un processus peut avoir. Vous pouvez le récupérer avecgetconf ARG_MAX
. Par exemple, sur mon système, c'est2097152
(~ 2,1 millions). Cela signifie querm
(qui n'est pas intégré) échouera avec plus de ce nombre de fichiers. Les commandes intégrées n'ont pas ce problème, pas plus que les autres solutions proposées.Vous pouvez également essayer cette commande,
Il supprimera tous les fichiers (compris entre 100 et 100 000) si le nom de fichier contient des nombres dans un ordre séquentiel.
la source
En général, vous disposez de plusieurs moyens pour y parvenir:
sera étendu par le shell en environ 100 000 noms de fichiers. Si le nom de base est un chemin long et que le nombre est suffisamment élevé, vous pouvez en fait dépasser la longueur maximale d'une ligne de commande avec cette approche.
La
for
bouclene souffre pas de ce problème, mais est un moyen relativement lent de supprimer les fichiers, car le shell doit effectuer la substitution de variables et lancer rm environ 100 000 fois.
Les deux méthodes ci-dessus peuvent provoquer des avertissements si certains fichiers, par exemple,
filename_101
étaient manquants.Habituellement, les solutions basées sur
find
sont meilleures, car elles ne fonctionnent que sur les fichiers qui sont réellement là (pendant la découverte). Cependant, il existe quelques différences subtiles:lancera toujours le
rm
programme environ 100 000 fois, tout en remplaçant le dernier\;
par+
tentera de minimiser le nombre de sous-processus. Les deux méthodes seront probablement (beaucoup ou un peu) plus lentes que celles-delete
qui n'utilisent pas du tout de commandes externes mais invoquent des appels système à la place.Cependant, vérifiez toujours d' abord si le modèle correspond réellement aux fichiers que vous souhaitez cibler:
Donc, dans ce cas, vous supprimez un fichier que vous souhaitez conserver et laissez les fichiers qui auraient dû être supprimés.
la source
Utilisez la commande suivante:
Cela supprimera les fichiers de 100 à 100000.
Plus d'informations: Site
la source
+
plutôt que\;
- voir ici . Ou, mieux encore, utilisez la-delete
commande find .[100-100000]
classe de caractères ne correspond qu'à un seul caractère, elle ne peut donc correspondre qu'à 0 ou 1.