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

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

というディレクトリがありますdata。内部には50以上のディレクトリを含むdataディレクトリがあり、その中にシェルスクリプトがあります。設定は次のとおりです。samplestesting.shdata

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

.txtディレクトリ名とともに、すべてのディレクトリへのパスを含むファイルを作成したいと思います。私はLinuxで働いています。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
...

関連情報