というディレクトリがありますdata
。内部には50以上のディレクトリを含むdata
ディレクトリがあり、その中にシェルスクリプトがあります。設定は次のとおりです。samples
testing.sh
data
data
|___ samples
|______ PREC001
|______ PREC003
|______ PREC023
|______ KRES118
|______ TWED054
.
.
.
|______ PREC098
|___ testing.sh
.txt
ディレクトリ名とともに、すべてのディレクトリへのパスを含むファイルを作成したいと思います。私はLinuxで働いています。testing.sh
samples
生成されたファイルは.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
해석되도록 해야 합니다 .zsh
sh
%q
zsh
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
...