6 Stimmen

Problem Auflisten von Dateien in der Bash mit Leerzeichen im Verzeichnispfad

Wenn Sie das Verzeichnis in die Befehlszeile eingeben, wird dies:

ls -d -1 "/Volumes/Development/My Project/Project"/**/* | grep \.png$

Druckt eine Liste aller Dateien, die auf .png .

Wenn ich jedoch versuche, ein Skript zu erstellen:

#! /bin/bash

clear ;

# Tempoary dir for processing
mkdir /tmp/ScriptOutput/ ;

wdir="/Volumes/Development/My Project/Project" ;

echo "Working Dir: $wdir" ;

# Get every .PNG file in the project
for image in `ls -d -1 "$wdir"/**/* | grep \.png$`; do
...    
done

Ich erhalte die Fehlermeldung:

cp: /Volumes/Development/My: No such file or directory

En space verursacht ein Problem, aber ich weiß nicht, warum?

6voto

Michał Šrajer Punkte 28652

Eine weitere Möglichkeit ist der Wechsel des IFS:

OLDIFS="$IFS"  # save it
IFS="" # don't split on any white space
for file in `ls -R . | grep png`
do 
    echo "$file"
done
IFS=$OLDIFS # restore IFS

Lesen Sie mehr über IFS in man bash .

2voto

l0b0 Punkte 51652

Mehr Zitate verwenden y nicht parsen ls Ausgabe .

for image in "$wdir"/**/*.png; do

1voto

Michał Šrajer Punkte 28652

Wenn Sie mit der Verwendung von while read und per Pipe erstellten Unterprozess können Sie:

find . -name '*.png' | while read FILE
do 
    echo "the File is [$FILE]"
done

0voto

Yajushi Punkte 1174

Sie können versuchen, [[:Leerzeichen:]] anstelle des Leerzeichens

wdir="/Volumes/Development/My[[:space:]]Project/Project"

oder den Befehl ausführen, um ein einzelnes Leerzeichen zu konvertieren

wdir=`echo "$wdir" | sed 's/[[:space:]]/\[[:space:]]/g'`

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X