KSH / bash để tạo tệp động


1

Tôi có một tên thư mục tmp trên thư mục đó trên cơ sở Danh mục tệp Tên tôi muốn tự động tạo số lượng tệp.

   if [ ! -d tmp ]
then
    mkdir tmp
fi

TEMPDIR=$HOME/tmp

cd $TEMPDIR

array_FileName_category[0]="File1"
array_FileName_category[1]="File2"
array_FileName_category[2]="File3"
array_FileName_category[3]="File4"
a=0
while [ $a -le 9 ]
do
### Creating Source Files
${array_FileName_category[$a]}_file=$TEMPDIR/${array_FileName_category[$a]}_file_$$
a=`expr $a + 1`
done

nhưng điều này không hoạt động và đưa ra các lỗi sau:

File Not found with array prefix.
and the other error is for zero index of array ${array_FileName_Category[$a]} is not working

Đầu ra mong muốn của tôi là: Nếu có FileC Category 'Sports' thì tại thư mục tmp sử dụng vòng lặp while, nó sẽ tạo một tệp có tiền tố Thể thao


cd -- "$TMPDIR"; mkdir -p -- "${array_FileName_category[@]}"
mikeerv

@mikeerv mkdir -p sẽ tạo tập tin hoặc thư mục
Aman

Xin lỗi, rõ ràng, trực tiếp. Tôi có thể thề rằng nó nói thư mục nói. Đồng ý. Chà, bạn có thể sử dụng kshtrực tiếp cho các tập tin, tôi nghĩ - đây là ksh93ATT ksh? teehoặc nhân tiện, touchcũng sẽ tạo ra các tập tin. touchsẽ an toàn hơn nhiều
mikeerv

@mikeerv có, đó là ksh93
Aman

Hãy thử một cái gì đó như: 'b = $ Array_FileName_carget [$ a]; c = $ {b} _file 'và cứ thế
Romeo Ninov

Câu trả lời:


2

Bởi vì quản lý mảng trong vỏ korn khác xa với các ngôn ngữ lập trình khác, bạn có thể thử một cái gì đó như: Thay vì điều này:

while [ $a -le 9 ]
do
${array_FileName_category[$a]}_file=$TEMPDIR/${array_FileName_category[$a]}_file_$$
a=`expr $a + 1`
done

thử đi:

while [ $a -le 9 ]
do
b=$array_FileName_category[$a]
touch $TEMPDIR/${b}_file_$$
a=`expr $b + 1`
done

PS và IMHO cho vòng lặp sẽ tốt hơn cho mục đích này


sau khi sửa đổi câu trả lời của bạn theo cách này nếu [! -d tmp] sau đó mkdir tmp fi TEMPDIR = $ HOME / tmp cd $ TEMPDIR a = 0 mảng_FileName_carget [0] = "File1" Array_FileName_carget [1] = "File2" mảng_FileName_carget [2] = "File3" File4 "echo $ {Array_FileName_carget [@]} trong khi [$ a -le 4] do b = $ {mảng_FileName_carget [$ a]} $ {b} _file = $ TEMPDIR / $ {b} _file _ $$ echo $ {b} a = expr $a + 1xong nó vẫn không hoạt động
Aman

Nó đang báo lỗi File1_file = .. / tmp / File1_file_33555804: không tìm thấy. điều đó có nghĩa là nó không được coi là tạo tệp chứ không phải là gán như một tệp.
Aman

Nếu bạn muốn tạo một tập tin, hãy xem những thay đổi của tôi trong tập lệnh
Romeo Ninov

lần này không có bất kỳ thông báo lỗi nào nhưng trên ls -ltr các tệp không được liệt kê, có nghĩa là số tệp đang hiển thị 8 nhưng không có bất kỳ tệp nào.
Aman

1
Nó hoạt động theo yêu cầu của tôi Cảm ơn anh chàng đã giúp đỡ :)
Aman
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.