2017-12-28 11 views

Antwort

3

Sie die bedingte Ausdrücke in bash verwenden könnte die Datei vorhanden ist (-f Flag) und nicht leer mit seiner -s Flagge zu überprüfen.

Auch Sie könnten einfach cp verwenden, um eine neue Kopie der Datei anstelle von cat-es zu erstellen.

Nicht sicher, warum Sie die Verwendung einer einzeiligen anstelle von ordnungsgemäß lesbaren Beispiel verwenden würden. Auf jeden Fall können Sie die obigen Logik als

[[ -f /etc/myfile.txt && -s /etc/myfile.txt ]] && cp /etc/myfile.txt newfile.txt 
+0

benötigt wird, bin ich nicht sicher, warum meine Kommentare gelöscht wurden, aber ich denke immer noch '-r' könnte nützlich sein. Oder hast du etwas gefunden, das etwas anderes sagen würde? – PesaThe

+0

Behalten Sie es ein wenig lesbar Ich würde etwas wie 'test -f /etc/myfile.txt &&test -s /etc/myfile.txt && cp /etc/myfile.txt newfile.txt 'schreiben, wenn ein oneliner benötigt wird. –

3
[ -s "/etc/myfile.txt" ] && cat /etc/myfile.txt > newfile.txt 

Sie haben noch zu cat die Datei verwenden, verwenden cp statt.

Hier prüft die Option -s, ob die Datei eine Größe ungleich Null hat. Von man test auf einem Linux-Box,

 -s FILE 
      FILE exists and has a size greater than zero 

EDIT: Über Lösung genügt, wenn /etc/myfile.txt eine reguläre Datei ist. Wenn man will, es zu überprüfen, ob eine normale Datei ist vor dem Prüfen die non-zero Größe, -f Flagge

[[ -f "/etc/myfile.txt" && -s "/etc/myfile.txt" ]] && cp /etc/myfile.txt newfile.txt 
+0

Dieser Test gibt auch true für Verzeichnisse mit einer Größe größer als 0 zurück. Zum Beispiel "/ etc" auf meinem Rechner hat eine Größe von 4kB, '[-s"/etc "]' true wahr bei "/ proc" was hat eine Größe von 0 auf meinem Rechner gibt es false zurück. – confetti

Verwandte Themen