У меня есть музыка с именем 1 - (song author) - (song name).flac и я хочу изменить имя файла на просто (song author) - (song name).flac затем переместить его в каталог. Вот что у меня так далеко

while IFS='' read -r line || [[ -n "$line" ]]; do
 cp $line /home/user/Desktop/Music/$(cut -c3- "$line");
done < filelist.txt

filelist.txt содержит список файлов, которые я хочу переименовать и переместить.

Это не работает, но в некотором смысле я думал, что это интересно. Я получаю сообщение об ошибке bash: /bin/cp: Argument list too long , и после изучения содержимого line после вырезания он выглядит просто как случайные символы / коды символов. Может кто-нибудь сказать мне, что я делаю не так?

1 ответ1

0

cut использует файл или stdin, а ключ -c для символов, и вам, скорее всего, нужны поля с разделителями пробелов. Кроме того, вы должны заключить второй аргумент cp в кавычки. И вам нужно указать -c5-, чтобы избавиться от:

while read -r line || [[ -n "$line" ]]; do
  cp $line "/home/user/Desktop/Music/$(echo "$line" | cut -d ' ' -f3-)"
done < filelist.txt

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .