Kann nicht über einen Dateinamen mit Leerzeichen stat

1652
Anil Bhargava

Ich bin sehr neu in Shell-Skripten und schreibe ein Skript für ein Projekt. Ich habe ein Problem, während Sie "stat" für einen Dateinamen verwenden, um die Größe zu überprüfen, die Leerzeichen enthält. Das Problem ist, dass ich den Befehl nicht direkt schreiben kann. Zuerst muss ich ihn in einer Variablen speichern und dann über diese Variable ausführen. Zum Beispiel lautet mein Skript:

##test.sh ###Start OIFS=$IFS  IFS=$'\n'  filename=$1  a=stat b=-c  c=%s d=$  CMD="$a $b $c $d"  result=`$CMD`  echo "Size is:"$result  IFS=$OIFS ###END 

Ich habe IFS = $ '\ n' gesetzt, um den Dateinamen mit Platz als Parameter zu übergeben. wenn ich es ausführen, bekomme ich:

[root@abhargava ~]# ./test.sh dirLevel1/file\ Level1.txt ./test.sh: line 9: stat -c %s dirLevel1/file Level1.txt: No such file or directory Size is: 

Aufgrund von IFS denke ich, dass Shell den Befehl als eine Einheit behandelt, ohne ihn in Teile zu teilen. Wenn ich die Einstellung von IFS entferne, heißt es:

[root@abhargava ~]# ./test.sh dirLevel1/file\ Level1.txt stat: cannot stat `dirLevel1/file': No such file or directory stat: cannot stat `Level1.txt': No such file or directory Size is: 

Der Parameter wird also als zwei verschiedene Dateien behandelt. Ich kann "$ @" auch nicht verwenden, weil ich den Dateinamen von einer anderen Logik bekomme, in der Dateien in einem Verzeichnis aufgeführt werden

for i in 'find $ -type f' do calling the test.sh done 

Bitte hilf mir so schnell wie möglich .. !! Danke im Voraus....!!

2
Aktualisieren Sie Ihre Formatierung, um sie lesbarer zu machen. Bitte überprüfen Sie, ob ich nichts versehentlich verschoben habe. nerdwaller vor 11 Jahren 0

2 Antworten auf die Frage

1
Ignacio Vazquez-Abrams
Solved my problem using an array instead of single variables Thank You very much... :) Anil Bhargava vor 11 Jahren 0
0
DaveSB

Ich stimme mit Ignacio überein, dass es am besten ist, Bash-Skripts einfach zu halten. Daher habe ich das Skript vereinfacht, damit es mit Leerzeichen arbeiten kann. Damit es Leerzeichen behandeln kann, hat das Skript das Einschließen des Dateinamens in Anführungszeichen ermöglicht, Leerzeichen im Dateinamen zu behandeln.

##test.sh ###Start  result=`stat -c %s "$1"`  echo "Size is:"$result  ###END