Ich habe ein Verzeichnis mit Dateien mit Namen
rho_0.txt
rho_5000.txt
rho_10000.txt
rho_150000.txt
rho_200000.txt
und so weiter. Ich möchte alle löschen, die ein Vielfaches von 5000 sind.
Ich habe Folgendes versucht:, printf 'rho_%d.txt\n' $(seq 5000 10000 25000) | rm
aber das gab mir die Antwort rm: missing operand
.
Gibt es eine andere Möglichkeit, dies zu tun?
ls
zuerst mit.Antworten:
Sie brauchen keine Schleife oder zusätzliche Befehle, wo Sie haben
Bash Shell Brace Expansion
.Erläuterung :
{start..end..step}
. Die-f
zu ignorierende Eingabeaufforderung für nicht vorhandene Dateien.PS Um die Sicherheit zu wahren und zu überprüfen, welche Dateien gelöscht werden, führen Sie bitte zuerst einen Test durch mit:
quelle
rm
liest nicht von der Standardeingabe. Du könntest es tun:Ich schließe die
-i
Option ein,rm
vor dem Entfernen eine Eingabeaufforderung abzugeben, damit Sie das Verhalten überprüfen können. Wenn Sie sicher sind, dass es das tut, was Sie wollen, können Sie diese Option weglassen.Bearbeiten: Alternativ können Sie Folgendes tun:
Dieses Formular ist möglicherweise vertrauter, wenn Sie programmiert haben.
quelle
Sie können keine Pipe zu einem Programm erstellen, als wäre der Inhalt der Pipe ein Argument. Es wird durch stdin geschickt.
Sie sollten xarg für diesen Zweck verwenden:
Aber zuerst können Sie es mit echo versuchen, um zu sehen, ob alles so ist, wie Sie es beabsichtigen:
quelle
seq
der hat-f
/--format
Option können Sie , dass anstelle dieser Behelfslösung mit verwendenprintf
und Kommandosubstitution.Jemand korrigiert mich, wenn ich falsch liege, aber wenn alle Dateien, die mit "" beginnen,
rho_
von dieser Form sind, ist dies nicht gleichbedeutend mit ""Da eine Zahl (ungleich 0) genau dann ein Vielfaches von 5000 ist, wenn sie auf 0000 oder 5000 endet.
(0 ist ein Sonderfall, da es ein Vielfaches von 5000 ist, aber normalerweise ohne zusätzliche führende Nullen geschrieben wird. Wenn Sie nicht vorhatten, 0 einzuschließen, nehmen Sie es aus der obigen Zeile heraus.)
Dies sollte natürlich nur verwendet werden, wenn alle
rho_*.txt
Dateien in Ihrem Verzeichnis die gewünschte Form haben. Verwenden Sie es nicht, wenn Ihr Verzeichnis auch enthältrho_please_dont_delete_me_5000.txt
.(Mathematische Anmerkung: Dies funktioniert genau deshalb, weil alle Primfaktoren von 5000, nämlich 2 und 5, auch Primfaktoren der Basis sind, in der wir arbeiten. 10. Entsprechend gibt es eine ausreichend große Potenz von 10 (nämlich 10000) durch 5000 teilbar. Es gibt keinen ähnlichen Trick für die Zuordnung aller Vielfachen von 3000.)
quelle