批量重命名文件以删除&后的所有内容

批量重命名文件以删除&后的所有内容

我有一个充满如下文件的目录:

Joe Schmidt 第 10 章 - 第七部分.mp4&content_uid=359&hash=8353ee953b9bb79cebf58cc46d7dc085&random=190644109

下载时,一堆网络内容保留在最后,现在我想将其删除,如下所示:

Joe Schmidt 第 10 章 - 第七部分.mp4

我在 macOS 上,有重命名命令等。

我尝试了以下方法,但效果不太好:

$ rename --verbose 's/\&\w*//' *

'Joe Schmidt_ Kapitel 10 - Teil 7.mp4&content_uid=359&hash=8353ee953b9bb79cebf58cc46d7dc085&random=190644109' 重命名为 'Joe Schmidt_ Kapitel 10 - Teil 7.mp4=359&hash=8353ee953b9bb79cebf58cc46d7dc085&random=190644109'

rename --verbose 's/\&\.*//' *

也不起作用。

而且由于有多个 & 符号 - 我想删除第一个 & 符号后的所有内容 - 我甚至不能使用 cut:

for i in $(find . -type f)
do
mv "$i" `echo $i | cut -d "&" -f1`
done

生成:

mv:将 ./Joe 重命名为 ./Joe:没有此文件或目录 mv:将 Schmidt_ 重命名为 Schmidt_:没有此文件或目录 mv:将 Kapitel 重命名为 Kapitel:没有此文件或目录 mv:将 10 重命名为 10:没有此文件或目录 mv:将 - 重命名为 -:没有此文件或目录 mv:将 Teil 重命名为 Teil:没有此文件或目录 mv:将 7.mp4&content_uid=359&hash=8353ee953b9bb79cebf58cc46d7dc085&random=190644109 重命名为 7.mp4:没有此文件或目录

答案1

解决它:

rename 's/&.*//' *

答案2

不算优雅,但应该可以工作。魔力就在引号里 :)

ls *\&* | (
  while read F
  do
    TGT="$(echo $F | cut -d'&' -f1)"
    echo mv "$F" "$TGT"
  done
)

请删除echo以启用该脚本。

相关内容