약 200개의 C 파일이 있는데 다음과 같은 텍스트 파일로 형식을 지정해야 합니다.
sem_post_stress.c
dup_fdopendir.c
shm_open.c and 198 others...
파일이 생성되면 바이너리 ./aarch64/le/
는 ..o
.dep
시작 시 다음 형식(바이너리당 한 줄씩)으로 약 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
GNU find
및 모든 셸(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/
.