将所有文件类型写入文件 - ubuntu

时间:2012-01-15 14:12:52

标签: linux bash terminal

我想将文件夹中所有文件的文件类型写入文件。

所以这就是我所做的

for xfile in *.*
do
file "x$file"  > values     
done

但是因为我的运气不好,它没有运行。并且错误消息是

: command not found 
'/check.sh: line 3: syntax error near unexpected token `do
'/check.sh: line 3: `do

有人可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:5)

首先,您的变量xfile,但您尝试使用文字file前面的变量x。我认为x$file应为$xfile

其次,您正在为每个文件执行file命令并每次覆盖values文件,这意味着只会显示最后一个文件。您可以通过预先删除文件并使用>>(追加)代替>(覆盖)来解决此问题。

第三,file命令完全能够处理多个参数,所以你真的只需要:

file * >values

那也使用*,因为*.*是Windows / DOS的东西 - 如果你想要类UNIX操作系统下的所有文件,*是正确的形式(或{{1如果你想隐藏文件,也可以。)


最后,上述建议都不会解决您的实际问题,这几乎肯定会在您的文件中出现DOS样式的行结尾。该错误消息与完美匹配,与您在此案例中看到的匹配。

在我的系统上,当我用DOS行结尾输入你的脚本时,我得到了相同的错误信息(主要是)。

如果您执行.*,您很可能会看到以下内容:

od -xcb check.sh

0000020 0a0d 6f64 0a0d 6966 656c 2220 7824 6966 \r \n d o \r \n f i l e " $ x f i 015 012 144 157 015 012 146 151 154 145 040 042 044 170 146 151 个字符表示行结尾不正确。

您可以使用自己喜欢的(不错的)编辑器来查看和删除这些内容,或者只使用\r安装dos2unix(尽管您可能已经拥有此功能)并执行以下操作:

apt-get

然后使用# sudo apt-get install dos2unix ## only if you don't have it already. dos2unix check.sh >check2.sh

虽然,请记住,单行:

check2.sh

仍然是比file * >values 循环更好的选择(但您仍然希望确保使用UNIX行结尾)。