2016-11-07 4 views
0

Dies funktioniert:Flattern Unter Verz & prepend Dateiname mit dir name bash mit

ls -SF data/*/*/* | xargs -I % cp % migrations/db.tmp/ 

Aber ich möchte den Dateinamen mit dem Verzeichnisnamen“ zB

data/folder1/subfolder1/file1.js -> data/folder1-subfolder1-file1.js 

Der nächste Schritt, den ich voranstellen versucht ist: (konnte aber nicht an die Arbeit)

ls -SF migrations/db/*/*/* | xargs -I % cp % migrations/db.tmp/$(basename %)-% 

Irgendwelche Ideen

01?

Antwort

1

Verwenden ls nicht, vor allem mit der -F Option:

cd data 
for f in */*/*; do cp "$f" "${f//\//-}"; done 

Hier ist eine viel schwierigere Methode

cd data 
printf "%s\n" */*/* | sed 'h; s,/,-,g; x; G; s/\n/ /; s/^/cp /' 

Das wird ein Bündel von cp Befehlen ausgegeben. Pipe in | sh, um sie auszuführen.

Verwandte Themen