我有一个充满如下文件的目录:
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
以启用该脚本。