Пакетное переименование файла, чтобы удалить все после &

648
right2clicky

У меня есть каталог, полный файлов, как это:

Джо Шмидт Капитель 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: такого файла или каталога нет

0

2 ответа на вопрос

0
right2clicky

Решил это с помощью:

rename 's/&.*//' * 
0
jvb

Не элегантно, но должно работать. Магия в кавычках :)

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

Пожалуйста, удалите, echoчтобы вооружить этот скрипт.