Решил это с помощью:
rename 's/&.*//' *
У меня есть каталог, полный файлов, как это:
Джо Шмидт Капитель 10 - Teil 7.mp4 & content_uid = 359 & hash = 8353ee953b9bb79cebf58cc46d7dc085 & random = 190644109
Куча веб-контента перестала загружаться, теперь я хотел бы удалить это так:
Джо Шмидт Капитель 10 - Teil 7.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 = bbb59595953
rename --verbose 's/\&\.*//' *
тоже не работал
А поскольку есть несколько амперсандов - я хочу убить все после первого амперсанда - я даже не могу использовать вырезание:
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: такого файла или каталога нет: переименовать 7.mp4 & content_uid = 359 & hash = 8353ee953b9bb79cebf58cc46d7dc085 & random = 190644109 to 7.mp4: такого файла или каталога нет
Решил это с помощью:
rename 's/&.*//' *
Не элегантно, но должно работать. Магия в кавычках :)
ls *\&* | ( while read F do TGT="$(echo $F | cut -d'&' -f1)" echo mv "$F" "$TGT" done )
Пожалуйста, удалите, echo
чтобы вооружить этот скрипт.