Linux
如何將文件名列印到自身
我在 foo 目錄中有多個文件(100-1000)。我想將每個文件名附加到它自己的內容中。我認為 for 循環應該解決為每個文件附加一個隨機字元串,
for f in *; do printf "%10s \n" $(shuf -i 50-100 -n 50 -r) >> $f; done
如何將文件名附加到所有這些打亂的數字,直接連接它們?
for f in *; do printf "%10s \n" $f $(shuf -i 50-100 -n 50 -r) >> $f; done
結果文件5:
5 67 89 69 ...
預期結果:
567 589 569 ...
好的,如果我沒記錯的話,您想在所有由
shuf
. 如果是這樣,只需將該字元串添加到printf
格式字元串的開頭:$ printf "x%10s\n" $(shuf -i 50-100 -n 3 -r) x 71 x 70 x 92
更改
%10s
以%s
使它們背靠背而沒有空格。同樣,您可以改用循環變數:$ for f in 1 2 3; do printf "$f%s\n" $(shuf -i 50-100 -n 2 -r); done 151 197 268 256 364 354
添加
>> "$f"
重定向到文件。請注意,由於此處的固定部分是格式字元串的一部分,因此任何
%
符號和反斜杠都將由printf
.
將結果儲存
shuf
到 bash 數組中,然後在參數擴展中使用替換來添加$f
:mapfile -t shuf < <(shuf -i 50-100 -n 50) printf '%10s \n' "${shuf[@]/#/"$f"}" >>"$f"
使用 zsh,使用
^
參數擴展:printf '%10s \n' "$f${(f)^"$(shuf -i 50-100 -n 50)"}" >> "$f"