我有一个包含许多对象的文件夹。这些对象的文件名没有扩展名。
我想使用file
获取模仿类型,然后将对象重命名为object.mimetype
。
此刻,这就是我保存为test.sh的内容:
#!/bin/bash
for i in *;
do "EXT"==$(file "$i" --mime-type -b | sed 's#.*/##')
combination= "$i.$EXT"
mv "$i" "$combination"
done
当我在目录上运行test.sh时,输出如下:
test.sh: line 3: EXT==tiff: command not found
test.sh: line 4: CCITT_1.: command not found
mv: cannot move 'CCITT_1' to '': No such file or directory
test.sh: line 3: EXT==jpeg: command not found
test.sh: line 4: image.: command not found
mv: cannot move 'image' to '': No such file or directory
test.sh: line 3: EXT==pdf: command not found
test.sh: line 4: Job-Description.pdf.: command not found
mv: cannot move 'Job-Description.pdf' to '': No such file or directory
所以我知道file ...
命令有效是因为我已经对其进行了测试,但是我在其他所有方面都感到困惑。我要去哪里错了?
答案 0 :(得分:2)
您可能希望将$(...)
的输出分配给$EXT
,因为您必须使用=
而不是==
,并且不能引用变量名。进行其他一些修改:
#!/bin/bash
for i in *; do
ext=$(file "$i" --mime-type -b | sed 's#.*/##')
mv "$i" "$i.$ext"
done
答案 1 :(得分:2)
您的主要问题似乎在于如何分配变量。当您为变量分配值时:
$
进行变量的参数扩展相反的情况以下应做您打算做的事情:
for i in *;
do ext=$(file "$i" --mime-type -b | sed 's#.*/##')
mv -v "$i" "$i.$ext"
done
注意:此代码与原始代码具有相同的假设,即,应重命名当前目录中的所有文件(包括任何非常规文件,例如目录),并且它们将按照其MIME重命名。键入,以便纯文本文件后缀为.plain
。