2012-01-26 29 views
11

Làm thế nào tôi có thể có các lệnh sauBASH chuyển hướng tạo thư mục

echo "something" > "$f" 

nơi $f sẽ giống như folder/file.txt tạo thư mục folder nếu không tồn tại?

Nếu tôi không thể làm điều đó, làm thế nào tôi có thể có một tập lệnh sao chép tất cả các thư mục (không có nội dung) trong thư mục 'a' vào thư mục 'b'?

ví dụ như nếu tôi có

a/f1/
a/f2/
a/f3/

Tôi muốn có

b/f1/
b/f2/
b/f3/

Trả lời

11

Những câu trả lời khác ở đây đang sử dụng lệnh bên ngoài "dirname". Điều này có thể được thực hiện mà không cần gọi một tiện ích bên ngoài.

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

Bạn cũng có thể kiểm tra xem thư mục đã tồn tại, nhưng điều này không thực sự cần thiết với mkdir -p:

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

Cảm ơn đã gợi ý, nhưng cú pháp đúng thực sự là '$ { f%/*} ' – baruch

+0

Tôi đã cập nhật câu trả lời. Xin lỗi, tôi đã trao cho bạn giải pháp thay thế cho 'basename', chứ không phải' dirname'. – jordanm

5

thử

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

Bạn có thể sử dụng mkdir -p để tạo ra các thư mục trước khi viết đến tập tin:

mkdir -p "$(dirname $f)" 
0
echo "something" | install -D /dev/stdin $f 
Các vấn đề liên quan