2016-04-07 5 views
0

Ich muss eine Datei in mehreren Verzeichnissen vorhanden löschen, wenn es sonst ignoriert wird. Ich habe das folgende Snippet ausprobiert.löschen Sie eine Datei in mehreren Verzeichnissen basierend auf dem Status der Suche Befehl in Unix

ls $dir/"$input.xml" 2> /dev/null 
     var = `echo$?` 
     if [[ $var == 0 ]]; then 
      echo -e "\n Deleting...\n" 
      rm $dir/"$input.xml" 

Es ist fehlgeschlagen.

Kann mir jemand eine bessere Lösung vorschlagen oder das obige Snippet ändern, um der Lösung zu entsprechen?

+0

Ihre Frage unklar ist. Sie sagen zu löschen wenn gefunden, sonst ignorieren. Dann sagen Sie in Ihren Kommentaren, dass Sie einen Fehler werfen müssen, wenn Sie nicht gefunden werden. Bitte erklären Sie ** deutlich, was Sie wollen. –

+0

Sie verwenden den 'ls' Befehl im Beispiel und fragen nach' find' Befehl in Frageanweisung. Bitte erläutern Sie ausführlich in Details in Frage –

Antwort

0

Nicht 100% sicher, was meinst du mit "lösche eine Datei vorhanden in mehreren Verzeichnissen, wenn es sonst gefunden wird ignoriert". Unter der Annahme, dass Sie einfach einige Dateien löschen möchten, die irgendwo unter $ dir sind, dies zu tun:

Verwenden finden die Dateien zu finden, und das Rohr zu xargs rm:

find "$dir" -type f -name "*.xml" | xargs rm 

Wenn Ihr Dateiname ist wahrscheinlich, dass diese Leerzeichen enthalten dann tun:

find "$dir" -type f -name "*.xml" -print0 | xargs -0 rm 

die rm Fehlermeldung im Fall zu unterdrücken gibt es keine Dateien:

find "$dir" -type f -name "*.xml" -print0 | xargs -0 rm 2>/dev/null 
+0

Ich muss eine Datei löschen, wenn sie gefunden wird. Wenn es nicht gefunden wird, muss ich eine Fehlermeldung ausgeben. Diese Datei befindet sich in vielen Verzeichnissen –

0

Um Ihren Code zu arbeiten, um dieses [Leerzeichen einfügen] machen versuchen,

`echo $?` 

Statt dessen,

`echo$?` 
Verwandte Themen