Linux

如何將文件名列印到自身

  • July 9, 2020

我在 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"

引用自:https://unix.stackexchange.com/questions/597560