我需要创建 1000 个输入文件,其中包含:
x=i,i 从 1 到 1000 不等
y=5
每个文件都应放在单独的目录中。我尝试过:
mkdir inp
cd inp
max=1000
for ((i=1;i<=max;i++)); do
mkdir dir{$i}
cd dir{$i}
cat input_file.txt
x=i > input_file.txt
y=5 >> input_file.txt
cd inp
done
失败了
答案1
如果我理解正确的话,你想要的是这样的:
for ((i=1;i<=1000;i++)); do
mkdir -p inp/dir$i
printf 'x=%s\ny=5s\n' "$i" > inp/dir$i/input_file.txt
done
答案2
您的代码是错误的,最好使用cd ..
而不是cd inp
,并且 而touch
不是cat
(cat
命令会为不存在的文件返回错误,touch
请创建它)。此外,使用echo
命令(或printf
如在中所述)@terdon 回答) 写入文件。
因此,如果您只想使用不出现错误的代码,您可以按如下方式操作:
mkdir -p inp
cd inp
max=1000
for ((i=1;i<=max;i++)); do
mkdir -p dir{$i}
cd dir{$i}
touch input_file.txt
echo x=i >> input_file.txt
echo y=5 >> input_file.txt
cd ..
done
注意:如果您希望将文件命名为dir1
,,dir2
...而不是dir{1}
,,dir{2}
...,只需删除{}
并mkdir
在cd
循环内命令:
mkdir -p dir$i
cd dir$i
max
NB2:您可以通过删除值或获取值作为参数来简化代码max
;使用名为的脚本script.sh
,执行时会像这样:
script.sh 100
和代码:
mkdir -p inp
cd inp
for ((i=1;i<=$1;i++)); do
mkdir -p dir$i
cd dir$i
touch input_file.txt
echo x=$i >> input_file.txt
echo y=5 >> input_file.txt
cd ..
done