我正在尝试检索40年前归档在Fairlight CMI软盘上的文件。有许多磁盘,每个磁盘最多有80个具有不同文件扩展名的文件,因此该过程需要自动化。我使用grep
来提取filenames
的列表,如下所示:
$ grep Sounddsk2.img ls -a1 > filenames
和CCD_ 3以基于它们的词缀来识别不同的文件类型。filenames
的短样本可以看起来像这个
bass.co
bass.ss
bass.vc
flute5.co
flute5.ss
flute5.vc
guitar.co
guitar.ss
guitar.vc
gawk
将用于将以.ss
结尾的文件名从filenames
输出到名为ss
的目录中(基于我之前在这里找到的问题的答案((已接受的答案仍然打开,是的,我仍在学习(
$ gawk '/^([a-zA-Z0-9]).ss$/' filenames > ss
我需要知道的是如何使用gawk
创建一个名为ss
的目录,在那里我可以保存从磁盘映像中提取的.ss
文件。这些问题看起来很有希望,但答案毫无结果。
在我尝试的第二个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.
我希望这一切都有意义。欢迎提出任何改进建议。谢谢
awk是一个操作文本的工具。操作(创建/销毁(文件(和进程(的工具是一个shell。你正试图在工作中使用错误的工具。
听起来这就是你想要做的(未经测试(:
while IFS= read -r file; do
sfx="${file##*.}"
mkdir -p "$sfx" &&
touch "$sfx/$file"
done < filenames
或者如果你真的只想要gawk
0文件,那么(再次未测试(:
sfx='ss'
grep ".${sfx}$" filenames |
xargs -n 1 -I {} sh -c 'mkdir -p '"$sfx"' && touch '"$sfx"'/{}'
如果这两个都不是你想要做的,那么请编辑你的问题以澄清你的要求。