2011-01-17 36 views
10

1) trong "A" thư mục:sử dụng "chạm" để tạo thư mục?

find . -type f > a.txt 

2) trong "B" thư mục:

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

3) Kết quả: 2) "tạo ra các tập tin" [i có nghĩa là chỉ với cùng tên tệp, nhưng với 0 Kích thước byte] ok. Nhưng nếu có các thư mục con trong thư mục "A", thì 2) không thể tạo các tệp trong thư mục con, vì không có thư mục nào trong đó.

Câu hỏi: có cách nào, rằng touch có thể tạo thư mục không?

+0

Cross-post: http://superuser.com/questions/234185/using-touch-to-create-directories –

+3

@Peter: 10 câu hỏi, 8 câu trả lời. không chấp nhận câu trả lời và không upvotes trên cả StackOverflow và SuperUser. Và bây giờ là một cross-post. Sigh ... – thkala

+0

Một [cross-post] khác (http://serverfault.com/questions/223267/using-touch-to-create-directories). Làm ơn đừng làm thế. –

Trả lời

9

Kể từ find ra một tập tin trên mỗi dòng:

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

    touch "$file"; 
done 

EDIT:

Đây sẽ là một chút hiệu quả hơn nếu các thư mục mà được tạo ra trong một bước riêng biệt:

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

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

Và, không, touch không thể tự tạo thư mục.

0

No. Tại sao không chỉ sử dụng mkdir thay vì liên lạc cho các thư mục?

+28

Sẽ hữu ích khi tạo các thư mục cần thiết, sau đó tạo tệp. sẽ dễ dàng hơn việc chạy 2 lệnh để hoàn thành cùng một mục đích. Đó là linux và tôi hy vọng nó là thông minh;) –

Các vấn đề liên quan