Regex 用乱码分割字符串

Regex 用乱码分割字符串,regex,linux,string,bash,Regex,Linux,String,Bash,我下载了一堆带有乱码的zip文件。文件名如下所示: 598»° 2Äêºó.zip 599»° ²Ýñ¾ÅÈË.zip 我试图编写一个脚本来在Linux系统中重命名文件名,这样上面的名称将变成598.zip和599.zip 我使用ls和grep命令将所有zip文件读入一个长字符串,例如称之为'total'。然后我对循环使用了: for $name in $total; do mv $name $newname; done 不幸的是,脚本在这里不起作用

我下载了一堆带有乱码的zip文件。文件名如下所示:

598»°   2Äêºó.zip

599»°   ²Ýñ¾ÅÈË.zip
我试图编写一个脚本来在Linux系统中重命名文件名,这样上面的名称将变成598.zip599.zip

我使用
ls
grep
命令将所有zip文件读入一个长字符串,例如称之为'total'。然后我对循环使用了

   for $name in $total; do

       mv $name $newname;

   done
不幸的是,脚本在这里不起作用。实际上,for循环将按空格分割字符串$total。上面显示的名称有空格字符。这些额外的空格字符使$name与zip文件的实际名称不匹配。我不知道怎么处理它。任何帮助都将不胜感激

find-maxdepth 1-iname'*.zip'|同时阅读ie
find -maxdepth 1 -iname '*.zip' | while read ie
do
  oe=$(awk NF=1 FPAT=[0-9]+ <<< "$ie").zip
  mv "$ie" $oe
done
做 oe=$(awk NF=1 FPAT=[0-9]+
find-maxdepth 1-iname'*.zip'|同时阅读ie
做
oe=$(awk NF=1 FPAT=[0-9]+我得到了答案。
在脚本执行此操作之前,只需添加以下代码:

   IFS='
  '
这将使用换行符作为内部字段分隔符。现在空格只是“普通”字符。

我得到了答案。 在脚本执行此操作之前,只需添加以下代码:

   IFS='
  '

这将使用换行符作为内部字段分隔符。现在空格仅为“普通”字符。

FPAT仅在awk 4及更高版本中受支持。您可以直接使用shell

find -maxdepth 1 -iname '*.zip' | while read file
do
  echo mv "$file" "${file/[^0-9]*/}"
done

如果上述脚本正常,请删除echo,然后重新运行。

FPAT仅在awk 4及以上版本中受支持。您可以直接使用shell

find -maxdepth 1 -iname '*.zip' | while read file
do
  echo mv "$file" "${file/[^0-9]*/}"
done

如果上述脚本正常,请删除
echo
,然后再次运行。

引用变量以防止在空格上拆分。可能是此问题与shell配置文件中使用的字符编码有关。请尝试utf-8以获得可读的表示引用变量以防止在空格上拆分。可能是此问题与c有关您的shell配置文件中使用的字符编码。请尝试utf-8以获得可读的表示谢谢!这很好。但是,输出看起来像“598 2.zip”、“599.zip”为什么
1
声誉?:]谢谢!这很好。但是,输出看起来像“598 2.zip”、“599.zip”为什么
1
声誉?:]