我需要建立 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}
, ... ,只需在循環中刪除{}
inmkdir
和命令: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