2011-01-17 20 views
10

1) "A" dizininde:dizin oluşturmak için "dokunma" kullanarak?

find . -type f > a.txt 

2) "B" dizininde:

cat a.txt | while read FILENAMES; do touch "$FILENAMES"; done 

3) Sonuç: 2) "dosyaları oluşturur" [yalnızca aynı dosya adı, ancak 0 Bayt boyutu ile] Tamam. Ancak "A" dizininde alt anahtarlar varsa, 2) alt dizindeki dosyaları oluşturamaz, çünkü içinde dizin yoktur.

Soru: touch'nın dizin oluşturabileceği bir yol var mı?

+0

Çapraz gönderi: http://superuser.com/questions/234185/using-touch-to-create-directories –

+3

@Peter: 10 soru, 8 cevaplıdır. StackOverflow ve SuperUser üzerinde sıfır kabul edilmiş yanıtlar ve sıfır upvotes. Ve şimdi bir çapraz yazı. Sigh ... – thkala

+0

Bir başka [cross-post] (http://serverfault.com/questions/223267/using-touch-to-create-directories). Lütfen bunu yapma. –

cevap

9

find yana çıkışlar satır başına bir dosya:

cat a.txt | while read file; do 
    if [[ "$file" = */* ]]; then 
     mkdir -p "${file%/*}"; 
    fi; 

    touch "$file"; 
done 

DÜZENLEME: Bu biraz daha verimli olacaktır

ayrı adımda oluşturduğunuz dizinleri eğer:

cat a.txt | grep/| sed 's|/[^/]*$||' | sort -u | xargs -d $'\n' mkdir -p 

cat a.txt | while read file; do 
    touch "$file"; 
done 

Ve Hayır, touch kendi başına dizin oluşturamaz.

0

Hayır. Neden sadece dizinler için dokunma yerine mkdir kullanmıyorsunuz?

+28

Gerekli dizinleri oluşturmak, sonra dosyayı oluşturmak yararlı olacaktır. Aynı amacı yerine getirmek için 2 komutu çalıştırmaktan daha kolay olacaktır. Linux ve akıllı olmasını bekliyorum;) –

İlgili konular