我下载了一堆带有乱码的zip文件。文件名如下:
598»° 2Äêºó.zip
599»° ²Ýñ¾ÅÈË.zip
我尝试编写一个脚本来重命名Linux系统中的文件名,以便上面的名称变为 598.zip 和 599.zip 。
我使用ls
和grep
命令将所有zip文件读入一个长字符串,例如'total'。然后我使用for loop
:
for $name in $total; do
mv $name $newname;
done
不幸的是,脚本在这里不起作用。实际上,for循环将按空格分割字符串$ total。上面显示的名称有空格字符。这些额外的空格字符使$ name与zip文件的实际名称不匹配。我不知道如何处理它。任何帮助都会很感激!
答案 0 :(得分:4)
find -maxdepth 1 -iname '*.zip' | while read ie
do
oe=$(awk NF=1 FPAT=[0-9]+ <<< "$ie").zip
mv "$ie" $oe
done
答案 1 :(得分:0)
我得到了答案。 只需在脚本执行操作之前添加以下代码:
IFS='
'
这将使用换行作为内部字段分隔符。现在这个空间只是“普通”的角色。
答案 2 :(得分:0)
仅在awk 4及更高版本中支持FPAT。您可以直接使用shell。
find -maxdepth 1 -iname '*.zip' | while read file
do
echo mv "$file" "${file/[^0-9]*/}"
done
如果上面的脚本没问题,请删除echo
,然后重新运行。