如何创建带有脚本路径和目录名称的文本文件?

beg*_*ner 0 linux path awk text

我有一个名为data. 里面data有一个目录samples拥有超过50个目录,有一个shell脚本testing.sh里面data。设置如下所示:

data
  |___ samples
         |______ PREC001
         |______ PREC003
         |______ PREC023
         |______ KRES118
         |______ TWED054
         .
         .
         .
         |______ PREC098
  |___ testing.sh
Run Code Online (Sandbox Code Playgroud)

我想创建一个.txt文件,其中testing.sh包含所有目录的路径samples以及目录名称。我在 linux 上工作。

创建的.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
Run Code Online (Sandbox Code Playgroud)

如何在 linux 中做到这一点。我实际上尝试了一些基本命令,但我无法得到我想要的。谢谢你。

Sté*_*las 5

这应该只是一个问题:

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

或者仅限制为目录类型的文件,使用zsh

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

请注意,file.txt如果找不到匹配的文件,它还具有报告错误并且不会破坏的优点。

更换(/:t)(-/:t)也包括类型文件的符号链接,最终解析为类型的文件目录

如果要生成sh稍后解释的 shell 代码,您还需要确保正确引用文件名。你可以替换%s使用%q为,但随后你需要确保脚本由解释zsh而不是sh作为%q可以使用某种形式的引用的特定于zsh

另一种选择是使用qq参数扩展标志,它总是使用单引号进行引用,这是最便携和最安全的引用运算符

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