[英]Bash script for linux to create 5 new files
我需要幫助來創建一個bash腳本。 我希望每次運行腳本時都會創建5個新文件。
我嘗試了一個像這樣的基本for循環:
#!/bin/bash
for i in {0..5}
do
touch File${i}
done
顯然,這只是創建了一個名為5個文件, File1
至File5
。 每次運行腳本時,我都需要它使用新名稱制作5個新文件。 在尋找什么方向的任何提示?
無需使用循環。 只需這樣做
touch File{1..5}
每次根據范圍創建新文件
START=$(ls | wc -l)
END=$((START+1))
for((i=START;i<=END;i++)); do
touch File$i
這個答案是在明確名稱是連續的並且繼續上一次運行之前給出的。 我會讓它站起來而不是刪除它,因為它可能為其他未來的讀者提供信息。
用mktemp
怎么樣:
mktemp {a..e}XXXXXX
樣本輸出
aW1KLgp
bZrPq2I
c1BKn8i
dIjzxrc
ezpWkkO
這將為您提供一個以a
開頭的文件,一個以b
開頭,依此類推。
或者你可能更喜歡這個:
mktemp {1..5}-XXXXXX
1-00r8Gf
2-wjojeF
3-lPni6G
4-ihYrOP
5-B5YtEB
嘗試類似的東西:
#!/bin/bash
count=$(ls File* 2>/dev/null | wc -l)
for ((i=$count+1; i<=$count+5; i++)); do
touch $(printf "File%03d" $i)
done
說明:
這里我假設文件以前綴“File”開頭。
行count=$(ls ...)
計算目錄中存在以“File”開頭的文件數。 第2>/dev/null
部分2>/dev/null
用於在初始執行時沒有這樣的文件時抑制錯誤消息。 然后for
循環相應地生成另外五個文件。 您可以修改%03d
的數字,具體取決於您要生成的文件數量。
雖然其他一些建議使用ls
piped to wc
但這並不保證是正確的,請參閱此處。
相反,您可以獲得當前目錄中的文件數量:
files=( * )
num_files=${#files[@]}
if [[ $files=='*' ]]; then
touch File{000..004}
exit
fi
for (( i=num_files; i<num_files+5; i++)); do
touch $( printf "File%03d" $i )
done
快速分解每個部分的作用:
files=( * )
使用模式匹配來獲取當前目錄中的所有文件,即使它們包含換行符。 ( )
表示從這些文件生成數組並將其分配給files
。
${#files[@]}
將給出數組files
的元素數量,即目錄中有多少文件。
if塊檢查files
是否為litterally *
,這意味着沒有匹配的文件,也就是說你在一個空目錄中,在這種情況下它會為你創建前5個文件。 否則,您將迭代接下來的5個文件編號。
touch $( printf "File$03d" $i )
在子shell中執行printf
,它將返回名稱File后跟一個帶有前導零的3位數字,以便您的文件按照您的預期排序。
你的問題也是一個人; {0..5}給你六個數字,而不是五個。
希望這可以幫助!
編輯0:
正如Mark在下面所說,使用shopt -s nullglob
將導致通配符在沒有匹配任何文件時返回任何內容,這是此處所需的行為。
這是更新的解決方案:
shopt -s nullglob
files=( * )
num_files=${#files[@]}
for (( i=num_files; i<num_files+5; i++)); do
touch $( printf "File%03d" $i )
done
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.