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 次 |
最近记录: |