2017-05-03 9 views
1

Ich versuche, ein Skript zu starten, um den Dateinamen von Dateien in einem anderen Verzeichnis (als Test) zu echoten, aber den Fehler "Keine solche Datei oder Verzeichnis" Fehler. Es sieht so aus, als ob es das ganze Verzeichnis von dem, wo ich zurückgebe, an den Dateinamen angehängt habe, an den ich versuche umzuleiten, aber wie kann ich das beheben? Vielen Dank.Umleitung Ausgabe Keine solche Datei oder Verzeichnis

for filename in /data/logs/2017/jan/201701* 
do 
echo $filename > /home/bishopm/${filename%.gz} 
done 

bekommen die folgenden Fehler für jede Datei ein Echo versuchen:

./data_collector.sh: line 5: /home/bishopm//data/logs/2017/jan/20170131: No such file or directory 
+0

Was ist der Zielpfad Sie verwenden möchten? '/ home/bischofm /' oder andere? – Inian

+0

Sie benötigen [Dateinamen und Erweiterung in Bash extrahieren] (http://stackoverflow.com/q/965053/1983854) – fedorqui

Antwort

0

Sie müssen tatsächlich sh sagen, dass Sie durch die Liste der Dateien in diesem Verzeichnis wiederholen wollen, so können Sie die ls nennen Befehl

for filename in $(ls /data/logs/2017/jan/201701*); 
do 
file=$(basename $filename) 
echo $file > /home/bishopm/${file%.gz} 
done 

Edit: jetzt sollte es funktionieren, vorausgesetzt, dass das bishopm Verzeichnis EDIT2 existiert: ersetzt die rev | cut | rev Kette mit basename, dank Sild

+1

'sh' erweitert das' * 'bereits in der Tat, Sie müssen nicht ls die Dateien –

+1

Ja, aber der resultierende $ filename hat den vollständigen Pfad, anstelle der Ausgabe von ls, die nur der Name der Datei wäre. Auch das Schrägstrich-Problem tritt auf diese Weise nicht auf. – PMonti

+0

Es tut immer noch das Anhängen, statt nur nur den Dateinamen umzuleiten. – martinbshp

0

Sie haben 2 / in Ihrem Pfad: /home/bishopm//.... Versuchen:

... 
echo $filename > "/home/bishopm${filename%.gz}" 
... 
0

Elegantere POSIX Lösung:

for filpath in /data/logs/2017/jan/201701*; do 
    filename="$(basename "${filepath}")" 
    echo "${filename}" > /home/bishopm/${filename%.gz} 
done 
Verwandte Themen