스크립트 경로와 디렉터리 이름을 사용하여 텍스트 파일을 만드는 방법은 무엇입니까?

스크립트 경로와 디렉터리 이름을 사용하여 텍스트 파일을 만드는 방법은 무엇입니까?

라는 디렉토리가 있습니다 data. 내부에는 50개 이상의 디렉토리가 포함된 data디렉토리가 있고 그 안에 쉘 스크립트가 있습니다 . 설정은 다음과 같습니다:samplestesting.shdata

data
  |___ samples
         |______ PREC001
         |______ PREC003
         |______ PREC023
         |______ KRES118
         |______ TWED054
         .
         .
         .
         |______ PREC098
  |___ testing.sh

.txt디렉터리 이름과 함께 모든 디렉터리에 대한 경로가 포함된 파일을 만들고 싶습니다 . 저는 리눅스에서 일하고 있어요.testing.shsamples

생성된 파일은 .txt다음과 같아야 합니다.

/data/testing.sh PREC001 samples
/data/testing.sh PREC003 samples
/data/testing.sh PREC023 samples
/data/testing.sh KRES118 samples
/data/testing.sh TWED054 samples
.
.
.
/data/testing.sh PREC098 samples

Linux에서 이를 수행하는 방법. 실제로 몇 가지 기본 명령을 시도했지만 원하는 것을 얻을 수 없었습니다. 감사해요.

답변1

이것은 단지 질문이어야 합니다:

(cd data/samples && printf '/data/testing.sh %s sample\n' *) > file.txt

또는 파일 형식으로 제한목차오직 zsh:

printf '/data/testing.sh %s sample\n' data/samples/*(/:t) > file.txt

file.txt또한 오류를 보고하고 일치하는 파일을 찾을 수 없는 경우 중단되지 않는다는 장점도 있습니다.

(/:t)사용. . . 대신 (-/:t)다음 유형의 파일도 포함합니다.심볼릭 링크궁극적으로 유형으로 확인되는 파일목차.

나중에 해석될 쉘 코드를 생성하려면 sh파일 이름이 올바르게 인용되었는지 확인해야 합니다. 이를 %s로 바꿀 수 있지만 스크립트가 에 특정한 인용 형식을 사용하는 것이 아니라 다음과 같이 %q해석되도록 해야 합니다 .zshsh%qzsh

qq또 다른 옵션은 항상 다음을 사용하는 인수 확장 플래그를 사용하는 것입니다.인용을 위한 작은따옴표는 가장 이식성이 뛰어나고 안전한 인용 연산자입니다.:

() {
  printf '/data/testing.sh %s sample\n' ${(qq)@}
} data/samples/*(/:t) > file.txt

답변2

내가 올바르게 이해했다면 다음과 같이 할 수 있습니다.

cd /pathto/data/samples || exit

for d in */; do
  echo "/data/testing.sh ${d: 1:-1} samples" >> /pathto/file.txt
done

$ cat file.txt
/data/testing.sh REC001 samples
/data/testing.sh REC003 samples
/data/testing.sh REC023 samples
...

관련 정보