J'ai un répertoire contenant des fichiers avec des noms
rho_0.txt
rho_5000.txt
rho_10000.txt
rho_150000.txt
rho_200000.txt
etc. Je voudrais supprimer tous ceux qui sont un multiple de 5000.
J'ai essayé ce qui suit:, printf 'rho_%d.txt\n' $(seq 5000 10000 25000) | rm
mais cela m'a donné la réponse rm: missing operand
.
Y a-t-il une autre façon de procéder?
ls
abord.Réponses:
Vous n'avez pas besoin d'une boucle ou de commandes supplémentaires là où vous en avez
Bash Shell Brace Expansion
.Explication :
{start..end..step}
. L'-f
invite à ignorer sur les fichiers inexistants.Ps Pour garder la sécurité et vérifier quels fichiers seront supprimés, veuillez d'abord faire un test avec:
la source
rm
ne lit pas depuis l'entrée standard. Vous pourriez faire:J'inclus l'
-i
option derm
demander avant la suppression afin que vous puissiez vérifier le comportement. Une fois que vous êtes sûr qu'il fait ce que vous voulez, vous pouvez omettre cette option.Edit: Alternativement, vous pouvez faire:
Ce formulaire peut être plus familier si vous avez fait de la programmation.
la source
Vous ne pouvez pas diriger vers un programme comme si le contenu du canal était des arguments. Il est envoyé via stdin.
Vous devez utiliser xarg à cet effet:
mais vous pouvez d'abord essayer avec écho pour voir si tout est comme vous le souhaitez:
la source
seq
possède l' option-f
/--format
, vous pouvez l'utiliser à la place de cette solution de contournement avecprintf
et substitution de commande.Quelqu'un me corrige si je me trompe, mais si tous les fichiers commençant par
rho_
sont de cette forme, n'est-ce pas équivalent à fairePuisqu'un nombre (autre que 0) est un multiple de 5000 si et seulement s'il se termine en 0000 ou 5000.
(0 est un cas particulier, car il s'agit d'un multiple de 5000, mais il est généralement écrit sans zéros non significatifs supplémentaires. Si vous n'aviez pas l'intention d'inclure 0, supprimez-le de la ligne ci-dessus.)
Bien sûr, cela ne doit être utilisé que si tous les
rho_*.txt
fichiers de votre répertoire ont la forme souhaitée. Ne l'utilisez pas si votre répertoire contient égalementrho_please_dont_delete_me_5000.txt
.(Note mathématique: cela fonctionne précisément parce que tous les facteurs premiers de 5000, à savoir 2 et 5, sont également des facteurs premiers de la base dans laquelle nous travaillons, 10. De manière équivalente, il y a une puissance suffisamment grande de 10 (à savoir 10000) qui est divisible par 5000. Il n'y a pas d'astuce similaire pour faire correspondre tous ceux qui sont des multiples de 3000.)
la source