2013-06-25 45 views
5

Giả sử tôi có một số thư mục, có chứa một số thư mục con, và trong mỗi người trong số những thư mục con Tôi muốn tạo ra một thư mục có cùng tên:Tạo một thư mục con cho tất cả các thư mục trong thư mục

./dir-1 
./dir-2 
... 
./dir-n 

Tôi muốn để làm mkdir */new-dir

nhưng điều này sẽ xảy ra lỗi. Cách tốt nhất để thực hiện điều này là gì?

Trả lời

6
for dir in $(ls); do 
    mkdir "$dir/new-dir" 
done 
3
find . -type d | xargs -I "{x}" mkdir "{x}"/new-dir 

Nếu bạn muốn giảm nó đến cấp độ đầu tiên của thư mục sử dụng

find . -maxdepth 1 -type d | xargs -I "{x}" mkdir "{x}"/new-dir 
0

Tốt hơn để chỉ liệt kê các thư mục nếu không bạn có thể nhận được một loạt các sai sót khi nó gặp một file thay vì của một thư mục

for dir in $(ls -d */); do mkdir "$dir/2015" done

+0

Xin vui lòng, không phân tích đầu ra của 'ls'. Cảm ơn bạn. –

3

Tuyệt vời mà câu hỏi này không bao giờ btained một câu trả lời lành mạnh:

shopt -s nullglob 
for i in */; do 
    mkdir -- "${i}newdir" 
done 
  • này là 100% an toàn liên quan đến những biểu tượng vui trong tên tập tin (số lượng, ký tự đại diện, vv).
  • shopt -s nullglob sao cho glob sẽ mở rộng thành không có gì nếu không có kết quả phù hợp.
  • Các -- trong mkdir để đánh dấu sự kết thúc tùy chọn (nếu có một thư mục với tên bắt đầu với dấu gạch ngang, không nhầm lẫn mkdir cố gắng để giải thích nó như là một tùy chọn).

Điều này âm thầm bỏ qua các thư mục ẩn. Nếu bạn cần phải thực hiện thao tác này trên các thư mục ẩn, chỉ cần thay thế dòng shopt -s nullglob bởi những điều sau:

shopt -s nullglob dotglob 

Các dotglob để các globs cũng xem xét ẩn các tập tin/thư mục.

Nếu bạn muốn chỉ có một lời khẩn cầu mkdir:

shopt -s nullglob 
dirs=(*/) 
mkdir -- "${dirs[@]/%/newdir}" 
+0

Thật tuyệt vời khi tôi bị giảm giá quá! Raging downvoters, xin vui lòng để lại một lưu ý, cảm ơn bạn. –

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