約200個のCファイルがあり、次のテキストファイルでフォーマットする必要があります。
sem_post_stress.c
dup_fdopendir.c
shm_open.c and 198 others...
ファイルが生成されると、バイナリ./aarch64/le/
は 。.o
.dep
起動時に、次の形式(バイナリごとに1行)で約200個のバイナリを含むイメージを作成するために使用されるテキストファイルを作成する必要があります。
/tmp/sem_post_stress = /home/.../.../.../.../aarch64/le/sem_post_stress
/tmp/dup_fdopendir = /home/.../.../.../.../aarch64/le/dup_fdopendir
/tmp/shm_open = /home/.../.../.../.../aarch64/le/shm_open
このリンクから:https://www.redhat.com/sysadmin/bash-scripting-loops
次のようにすべてのファイルの名前を変更する方法を知っていますが、私のqemu環境または残りの環境にプレフィックスを追加する方法はわかりませんfor i in $(ls *.); do
。"/tmp/"
=
absolute path
私は初めてbashに触れて、一度も試したことがないので、これがマイナーな場合は申し訳ありません。どこを見てみました。どんなヒントやコードでも本当にありがとうございます!
答え1
そしてzsh
:
(for file (aarch64/le/*(N*)) print -r /tmp/$file:t = $file:P) > file.out
どこ:
aarch64/le/*(N*)
次に展開されるaarch64/le
非表示で実行可能な汎用(N*)
ファイルのリストグローバル予選、N
ullglob、一致するものがない場合は、実行可能ファイル*
を選択するためにリストが空になります(ニーモニック:実行可能ファイルで使用されているものと同じプレフィックスls -F
)。$var:t
t
パスのすべての内容(デフォルト名)を取得します。$var:P
real
パスのPを取得します(標準関数やコマンドと同様に、絶対的で正式でシンボリックリンクのないパス)。ath
realpath()
realpath
GNUfind
とすべてのシェル(bash、GNUシェルを含む)の場合:
LC_ALL=C find "$PWD/aarch64/le/" -maxdepth 1 ! -name '.*' -executable -type f \
-printf '/tmp/%f = %p\n' > file.out
zshメソッドとは異なり、これはソートされていないリストを提供します。
sh
標準とユーティリティを含むPOSIXly:
for file in aarch64/le/*; do
if [ -x "$file" ] && [ -f "$file" ] && [ ! -L "$file" ]; then
printf '%s\n' "/tmp/${file##*/} = $PWD/$file"
fi
done > file.out
(zshとbashでも機能しますが、zsh(またはfailglob
オプションが設定されている場合はbash)でaarch64/le/
。