2017-05-15 2 views
1

Ich bin in der Lage, alle Dateien in einem Verzeichnis und seinen Unterverzeichnissen zu finden. Ich speichere es in einem Array, aber ich muss auch diejenigen, die Leerzeichen in ihren Namen haben, zu einem Unterstrich umbenennen.Finden Sie alle Dateien in dir/Unterverzeichnissen und speichern Sie in einem Array, sondern auch Dateien mit Leerzeichen zu Unterstrich

Probenstruktur

./abc 123.txt 
./dags/ftp.pyc 
./dags/ftp.py 
./logs/scheduler/2017-05-12/ftp.py.log 

die Dateien finden und

array=($(find . -type f -print0 | xargs -0)) 

# Does not work 
for i in ${array[@]};do echo ${i// /_};done 

#Output 
./abc 
123.txt 
./dags/ftp.pyc 
./dags/ftp.py 
./logs/scheduler/2017-05-12/ftp.py.log 

Es in ein Array einfügen wäre ideal, wenn ich regex gegen den Wert laufen konnte, bevor es in das Array geht.

+0

'echo" Dateiname mit Leerzeichen "| tr '' '_''> 'filename_with_spaces' – Aaron

+0

Sie haben die Dateinamen nicht erfolgreich in ein Array eingegeben. Das erste Element im Array ist "./abc" und das zweite Element ist "123.txt". –

+2

Verwenden Sie einfach umbenennen, oder tun Sie etwas wie: 'finden. -exec sh -c 'echo "$ 0" "$ {0 ///_}"' {} \; ' (dies behandelt keine anderen Leerzeichen als Leerzeichen) Der Versuch, die Dateien in ein Array zu stopfen, ist zum Scheitern verurteilt. –

Antwort

0

Das Problem mit dem obigen Befehl ist, dass das Array durch den Dateinamen mit Leerzeichen als zwei Variablen und nicht eins durchläuft. Etwas wie unten sollte funktionieren

find . -type f -print0 | while IFS= read -r -d '' file; do echo ${file// /_} ; done 
+0

DANKE. das ist, was ich gesucht habe. – luckytaxi

Verwandte Themen