Wie kann ich einen Variablennamen und einen Platzhalter in einem Dateinamen erweitern?

1174
Nathan Long

Ich habe ein Bash-Skript, in dem $DIRein Verzeichnisname steht, der Leerzeichen enthalten kann.

Diese:

rm "$DIR/*.MOV" 

gibt den Fehler "Keine solche Datei oder Verzeichnis". Es gibt keine Datei, die buchstäblich "* .MOV" heißt. Ich möchte, dass das *Argument in mehrere Argumente erweitert wird - eines pro übereinstimmendem Dateinamen.

Z.B:

rm some\ folder/foo.MOV some\ folder/bar.MOV 

Wie kann ich das machen?

0

2 Antworten auf die Frage

4
Cyrus

Quoting prevents globbing. Try this with GNU bash:

rm "$DIR"/*.MOV 
Normalerweise verwende ich `{}`, wenn ich etwas an meine Variable anhängen oder ändern möchte, wie folgt: `$ / *. MOV`. Ich weiß nicht, welche davon besser ist, aber die Verwendung von "{}" funktioniert jedes Mal für meine Anwendungsfälle. jena vor 5 Jahren 0
-1
Nathan Long

A workaround:

for FILE in `ls "$DIR" | grep .MOV`; do rm "$DIR/$FILE" done 
[Warum sollten Sie die Ausgabe von 'ls' nicht analysieren?] (Https://mywiki.wooledge.org/ParsingLs). Kamil Maciorowski vor 5 Jahren 0
@ KamilMaciorowski - Ist es nicht besser, in Ihren Dateinamen keine Zeilenumbrüche zu verwenden? Wer würde das sowieso tun? Ich bin kein Systemadministrator, ich arbeite an Datendateien, die von mir und meinen Kollegen erstellt wurden. Obwohl eine davon verrückt ist (unter anderem ADHD), ist das Verlegen von Zeilenumbrüchen in Dateinamen einfach verrückt und ich hätte solche Dateinamen korrigiert. In dem Link schlagen sie sogar vor, Zeitstempel in Dateinamen zu setzen, nur um zu vermeiden, dass * keine neuen Zeilen in sie eingefügt werden - wtf? jena vor 5 Jahren 0
@jena Ist es nicht besser, kein Öl auf den Boden zu spritzen? Wer würde das sowieso tun? Vielleicht ein * Schurke *, der die Tatsache ausnutzen will, dass Sie unvorsichtig sind. Außerdem: Unfälle passieren, schlecht geschriebene Archiver entpacken Dateien mit seltsamen Namen usw. Wenn Sie 'ls' parsen möchten, haben Sie die Wahl, Sie wurden gewarnt. Personen, die diese Antwort in ihren Projekten verwenden möchten, wenn sie sich mit * Dateinamen unbekannter Herkunft * befassen, sollten ebenfalls gewarnt werden, bevor sie sich zu sehr bemühen. Kamil Maciorowski vor 5 Jahren 0
Ich stimme teilweise zu, wie gesagt, ich bin kein Sysadmin, sondern Wissenschaftler. Daher arbeite ich in der Regel an gesicherten Clustern, die von meinen Kollegen und meinen Kollegen erstellt werden. Wenn ich Standardwerkzeuge verwende und mit vernünftigen Leuten arbeite, kann ich 'ls' ganz genau analysieren, habe ich recht? jena vor 5 Jahren 0