Mam katalog zawierający pliki o nazwach
rho_0.txt
rho_5000.txt
rho_10000.txt
rho_150000.txt
rho_200000.txt
i tak dalej. Chciałbym usunąć wszystkie te, które są wielokrotnością 5000.
Próbowałem następujących:, printf 'rho_%d.txt\n' $(seq 5000 10000 25000) | rm
ale to dało mi odpowiedź rm: missing operand
.
Czy jest na to inny sposób?
ls
najpierw testuję te rzeczy .Odpowiedzi:
Nie potrzebujesz pętli ani dodatkowych poleceń tam, gdzie masz
Bash Shell Brace Expansion
.Objaśnienie :
{start..end..step}
. Znak-f
ignorowania w przypadku nieistniejących plików.Ps Aby zachować bezpieczeństwo i sprawdzić, które pliki zostaną usunięte, wykonaj najpierw test z:
źródło
rm
nie odczytuje ze standardowego wejścia. Mógłbyś:Uwzględniam
-i
opcjęrm
monitowania przed usunięciem, aby można było zweryfikować zachowanie. Gdy masz pewność, że robi to, co chcesz, możesz pominąć tę opcję.Edycja: Alternatywnie możesz:
Ta forma może być bardziej znana, jeśli wykonałeś jakiekolwiek programowanie.
źródło
Nie można potokować do programu tak, jakby treść potoku była argumentem. Jest wysyłany przez stdin.
W tym celu powinieneś użyć xarg:
ale najpierw możesz wypróbować za pomocą echa, aby zobaczyć, czy wszystko jest tak, jak chcesz:
źródło
seq
ma opcję-f
/--format
, możesz jej użyć zamiast tego obejściaprintf
i zastępowania poleceń.Ktoś poprawi mnie, jeśli się mylę, ale jeśli wszystkie pliki, które zaczynają
rho_
się od tego, mają tę formę, czy nie jest to równoważne z tym, aby zrobićPonieważ liczba (inna niż 0) jest wielokrotnością 5000 wtedy i tylko wtedy, gdy kończy się na 0000 lub 5000.
(0 to szczególny przypadek, ponieważ jest wielokrotnością 5000, ale zwykle jest zapisywany bez dodatkowych zer wiodących. Jeśli nie zamierzasz uwzględniać 0, usuń go z powyższej linii.)
Oczywiście należy tego używać tylko wtedy, gdy wszystkie
rho_*.txt
pliki w twoim katalogu mają pożądaną formę. Nie używaj go, jeśli twój katalog również zawierarho_please_dont_delete_me_5000.txt
.(Uwaga matematyczna: Działa to dokładnie dlatego, że wszystkie czynniki pierwsze 5000, a mianowicie 2 i 5, są również czynnikami podstawowymi podstawy, w której pracujemy, 10. Równolegle istnieje wystarczająco duża moc 10 (a mianowicie 10000), która jest podzielny przez 5000. Nie ma podobnej sztuczki dla dopasowania wszystkich tych, które są wielokrotnościami 3000.)
źródło