【发布时间】:2021-05-25 09:19:44
【问题描述】:
我正在尝试检索四年前存档在Fairlight CMI 软盘上的文件。有许多磁盘,每个磁盘最多包含 80 个具有不同文件扩展名的文件,因此该过程需要自动化。我使用grep 来提取filenames 的列表,如下所示:
$ grep Sounddsk2.img ls -a1 > filenames
和gawk 以根据其词缀识别不同的文件类型。 filenames 的简短示例可能如下所示
bass.co
bass.ss
bass.vc
flute5.co
flute5.ss
flute5.vc
guitar.co
guitar.ss
guitar.vc
gawk 将用于将filenames 中以.ss 结尾的文件的名称输出到名为ss 的目录中(基于我之前找到的here 问题的答案)(仍然接受答案打开,是的,我还在学习)
$ gawk '/^([a-zA-Z0-9])\.ss$/' filenames > ss
我需要知道的是如何使用gawk 创建一个名为ss 的目录,我可以在其中保存从磁盘映像中提取的.ss 文件。 These questions 看起来很有希望,但答案毫无结果。
在我第二次尝试的gawk 脚本中,扫描filenames 以查找以.ss 结尾的文件,并计算记录分隔符(即.)。如果tally 不为零,则脚本会创建一个名为ss 的目录,其中提取的.ss 文件将被保存(最终)。
我试图通过将. 定义为记录分隔符来从文件名中分离后缀,但这可能不是正确的方法,因为如果下面的命令行不起作用ss 也出现在文件名中。
$ gawk ‘BEGIN{RS=“[.]”; filetype= “ss”; tally=0} index($1, “ss”){tally++} END{print tally; mkdir ss}’ filenames
并且在下面命令的下一个版本中,gawk 无法读取创建ss 目录所需的测试条件
$ gawk ‘BEGIN{RS=“[.]”; filetype= “ss”; tally=0} index($1, “ss”){tally++} END{if (tally >0) {mkdir ss}}’ filenames
所以我的问题是:
- 如何使用
gawk定义文件名后缀ss? - 如何测试创建名为
ss的目录所需的条件?
注意
这些示例中保存的是文件名而不是实际文件。拥有一个文件名列表将用于自动执行以下命令行,其中可执行文件a 将get 每个archivedfile 从软盘映像中生成一个localfile,就像这样
$ a Sounddsk2.img get archived-file local-file.
我希望这一切都有意义。非常欢迎任何改进建议。谢谢。
【问题讨论】: