重命名文件并删除shell PID作为扩展名

时间:2013-07-09 21:16:45

标签: linux bash pid

我正在编写一个脚本,检查目录中的文件是否有shell pid作为扩展名,并以删除扩展名的方式重命名它们。我已经使用mv filename filename重命名了几个文件以添加ext。

我需要有关如何重新命名它们的建议,以便它们不包含PID。

到目前为止,我已经见过:

for file in *
do
if [ -s $file ]
then
  if [ $file = *.[0-9] ]
  then
  #mv command
  fi
fi
done

**这是在过去几个小时里骚扰我**

:(

3 个答案:

答案 0 :(得分:3)

这是另一个:

#!/bin/bash

shopt -s extglob nullglob

for i in *.+([[:digit:]]); do
    mv -- "$f" "${f%.*}"
done

诀窍是使用extglob(默认情况下可能已经打开,再打开它没有坏处),以便*.+([[:digit:]])扩展到以dot结尾的所有文件名一个或多个数字。因此,我们不需要任何正则表达式!

答案 1 :(得分:1)

您可以使用以下方法删除所有文件的扩展名:

for f in *.*
do 
    mv "$f" "${f%.*}"
done

至于你的尝试,[ .. ]无法与globs匹配(你的glob只会匹配.后的一位数)。请使用[[ .. ]]。您还应引用$file的所有出现次数。像shellcheck这样的工具会自动指出这些问题。

答案 2 :(得分:1)

解决方案可以是:

#!/bin/bash

touch a.12345
touch b.23456

for file in *; do
  [[ $file =~ \.[0-9]+$ ]] && echo ${file%$BASH_REMATCH}
done

输出:

a
b

仅当扩展名只包含一个或多个数字时,才会切断扩展名。实际上它也切断了.0000000000,这不是一个有效的PID,但也许这不是一个大问题。

echo命令可以替换为mv "$file" "${file%$BASH_REMATCH}"