【发布时间】:2013-10-25 02:35:20
【问题描述】:
好吧,这可能是一个措辞不当的标题,但我不太确定如何写。我正在尝试做的是浏览大量文件(没有扩展名)并确定它们是什么,然后添加适当的扩展名。
我发现了一个非常方便的 linux 实用程序“文件”来帮助解决这个问题。我比 bash 和 awk 更了解 Python 语法,但是我在让第 3 方“python-magic”模块在我的机器上工作时遇到了很多问题,所以我没有浪费时间尝试用 bash/ 编写它哎呀。
我相信我真的很接近,但我的语法仍然有问题,我不确定是什么。
代码如下:
for i in *;
do file $i | awk '{
switch ($2) {
case $2 == 'TIFF':
mv $i "$i.tif"
case $2 == 'PDF':
mv $i "$i.pdf"
case $2 == 'ASCII':
mv $i "$i.txt"
case $2 == 'Rich':
mv $i "$i.rtf"
case $2 == 'gzip':
mv $i "$i.gz"
}
}';
done
我在一些测试 txt 文件中遇到的语法错误是:
awk: cmd. line:3: case $2 == TIFF:
awk: cmd. line:3: ^ syntax error
awk: cmd. line:3: case $2 == TIFF:
awk: cmd. line:3: ^ syntax error
awk: cmd. line:3: case $2 == TIFF:
awk: cmd. line:3: ^ syntax error
awk: cmd. line:3: case $2 == TIFF:
awk: cmd. line:3: ^ syntax error
awk: cmd. line:3: case $2 == TIFF:
awk: cmd. line:3: ^ syntax error
awk: cmd. line:3: case $2 == TIFF:
awk: cmd. line:3: ^ syntax error
awk: cmd. line:3: case $2 == TIFF:
awk: cmd. line:3: ^ syntax error
awk: cmd. line:3: case $2 == TIFF:
awk: cmd. line:3: ^ syntax error
awk: cmd. line:3: case $2 == TIFF:
awk: cmd. line:3: ^ syntax error
awk: cmd. line:3: case $2 == TIFF:
awk: cmd. line:3: ^ syntax error
我看到了其他一些使用 awk 和 sed 进行文件重命名的有趣方法,但至少在我看来,与“文件”结合使用,这似乎是我技能水平的最佳方法。
如果有人能帮我解决这些 awk 语法错误,那就太好了。或者,在更通用的帮助意义上,如果您知道完成此任务的更好方法,请分享:)
编辑:
我进行了建议的更改(固定引号,从每个案例中删除了比较运算符,添加了中断)。现在脚本运行没有错误,但没有任何文件被更改。它们仍然是无扩展的。我的测试文件都是 ASCII,所以应该重命名为在末尾附加 '.txt'。
为了测试和验证我使用 awk 拉出正确的字段,我运行了这个小测试:
$ file test2 | awk '{printf $2}'
ASCII
所以 $2 是文件类型。关于它为什么不起作用的任何想法?
【问题讨论】:
-
另外,您正在尝试执行
mv程序,就像它是awk命令一样。 -
实际上,您的大部分
awk脚本看起来都像shell。 -
@chepner 所以我认为这不是有效的语法。我会更好地执行 mv 命令的 printf 结构并将其附加到新文件中吗?想到在 for 循环结束时,我有一个文件,它本质上是一个 mv 命令的大列表,我可以作为 shell 脚本运行?