쉘 스크립트를 사용하여 폴더에 있는 모든 실행 파일의 이름(형식 포함)을 텍스트 파일에 쓰시겠습니까?

쉘 스크립트를 사용하여 폴더에 있는 모든 실행 파일의 이름(형식 포함)을 텍스트 파일에 쓰시겠습니까?

약 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*)파일 목록글로벌 예선, Nullglob , 일치하는 항목이 없으면 *실행 파일을 선택하기 위해 목록이 비어 있게 확장됩니다(니모닉: 실행 파일에 사용된 것과 동일한 접두사 ls -F).
  • $var:tt경로의 모든 내용(기본 이름)을 가져옵니다 .
  • $var:Preal경로의 P를 가져옵니다 (표준 함수나 명령과 마찬가지로 절대적이고 정식이며 기호 링크가 없는 경로).athrealpath()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/.

관련 정보