2012-01-26 6 views
11

Jak mogę mieć następujące polecenieBASH przekierować utworzyćkatalogu

echo "something" > "$f" 

gdzie $f będzie coś folder/file.txt utworzyć folder folder jeśli nie istnieje?

Jeśli nie mogę tego zrobić, w jaki sposób mogę mieć skrypt powielać wszystkie foldery (bez zawartości) w katalogu "a" do katalogu "b"?

przykład jeśli mam

a/f1/
a/F2/
a/F3/

chcę mieć

b/f1/
b/F2/
b/F3/

Odpowiedz

11

innych odpowiedzi tutaj są za pomocą polecenia zewnętrznego „dirname”. Można to zrobić bez wywoływania zewnętrznego narzędzia.

mkdir -p "${f%/*}" 

Można również sprawdzić, czy katalog już istnieje, ale to naprawdę nie jest wymagane z mkdir -p:

mydir="${f%/*}" 
[[ -d $mydir ]] || mkdir -p "$mydir" 
+0

Dzięki za podpowiedź, ale poprawna składnia jest faktycznie '$ { f%/*} ' – baruch

+0

Zaktualizowałem odpowiedź. Przepraszam, podałem ci alternatywę do 'basename', a nie' dirname'. – jordanm

5

spróbować

mkdir -p `dirname $f` && echo "something" > $f 
1

Można użyć mkdir -p utworzyć folder przed zapisaniem do pliku:

mkdir -p "$(dirname $f)" 
0
echo "something" | install -D /dev/stdin $f