好吧,这可能是一个措辞不佳的标题,但我不太确定如何写。我要做的是浏览大量文件(没有扩展名)并确定它们是什么,然后添加适当的扩展名。
我发现了一个非常方便的 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 进行文件重命名的有趣方法,但至少在我看来,结合 'file' 使用,这似乎是我技能水平的最佳方法。
如果有人能帮我解决这些 awk 语法错误,那就太好了。或者,在更通用的帮助意义上,如果您知道完成此任务的更好方法,请分享:)
编辑:
我进行了建议的更改(固定引号,从每个案例中删除了比较运算符,添加了中断)。现在脚本运行没有错误,但没有任何文件被更改。它们仍然是无扩展的。我的测试文件都是 ASCII,所以应该重命名为在末尾附加“.txt”。
为了测试和验证我正在使用 awk 拉出正确的字段,我运行了这个小测试:
$ file test2 | awk '{printf $2}'
ASCII
所以 $2 是文件类型。关于为什么它不起作用的任何想法?