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 中做到这一点。我实际上尝试了一些基本命令,但我无法得到我想要的。谢谢你。
这应该只是一个问题:
(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)
| 归档时间: |
|
| 查看次数: |
38 次 |
| 最近记录: |