Аудиофайлы, измененные командой bash, переименовывая их

Сегодня я отправляю случай неожиданного последствия команды оболочки на некоторые аудиофайлы, которые я вообще не понимаю.

Вот факты:

  1. Моя ОС – это ArchLinux, менеджер окон – Awesome, а для терминала используется Konsole.

  2. Имея много каталогов и файлов, содержащих пробелы и / или определенные символы, как ',{,[,?,! Я хотел переименовать их, удалив любые пробелы и / или определенные символы.

  3. Если вы ищете команду оболочки, я нашел эту замену (например) символом _ символом a . :

$ find ./ -type f -exec sed -i -e's /_/ ./ g '{} \;

  1. Я использовал эту команду во многих каталогах, в которых все файлы были переименованы, как я ожидал, я был доволен этим.

Но

  1. Имея несколько каталогов, содержащих некоторые аудиофайлы, которые я хотел переименовать, я применил эту команду bash в этих каталогах. В отличие от предыдущих применений, процесс был более длительным, и в конце его результат был не таким, как я ожидал. Сначала большинство файлов не были переименованы. Во-вторых, все аудиофайлы (mp3, flac, …) были изменены / повреждены и больше не идентифицированы никаким устройством чтения аудиофайлов. Напротив, аудиофайлы, на которых я не использовал команду bash, всегда правы и могут быть прочитаны.

Например, когда я пытаюсь прочитать один из измененных файлов с помощью smplayer, появляется сообщение об ошибке: MPlayer / mpv завершился неожиданно. Код выхода: 2. Файл журнала добавляет: «Не удалось распознать формат файла».

Ссылаясь на первый ответ, я даю ниже дополнительную информацию о последствиях изменения.

Используя 3 команды, чтобы получить то, что я хотел:

  • find ./ -type f -exec sed -i -e's /_/ ./ g '{} \;

  • find ./ -type f -exec sed -i -e '/ / ./g' {} \;

  • find ./ -type f -exec sed -i -e 's /.././ g' {} \;

Вот несколько примеров имен файлов до> после коррупции:

1 _-_ Bob_The_Sponge _-_ Жизнь под морем. Flac> 1 .-. Боб.The.Sponge.-. Living.under the Sea.flac (обратите внимание, что некоторые пробелы все еще присутствуют)

2 _-_ Bob_The_Sponge _-_ Nemo_my_friend.mp3> 2 .-. Bob_The.Sponge .-. Nemo my.friend.mp3 (обратите внимание, что один '_' не был удален, и одно имя было добавлено в это имя).

Все случаи не могут быть воспроизведены здесь, некоторые имена файлов были хорошо изменены, некоторые другие частично, некоторые другие, как и раньше.

Вес измененных файлов не изменился, а также права на эти файлы. Изменена только дата последнего изменения.

Естественно, я хотел бы понять, что произошло. Я попытался найти объяснения с разными браузерами, но я не нашел подобных или близких проблем.

Итак, мои вопросы:

  1. Почему эта команда bash, похоже, изменила эти аудиофайлы?
  2. Почему эта команда влияет на этот тип файла, а не на другие?
  3. Что может быть решением для устранения повреждений этой команды в этих файлах?

  • Не удалось удалить каталог даже с правами root
  • Удаление некоторых из самых больших файлов в каталоге
  • Организация беспорядочной папки на основе типа файла
  • Как tar-bzip старые файлы в ежегодных группах
  • Неверная эмблема, используемая для PDF-файлов, созданных LibreOffice
  • Как я могу скопировать скрытый каталог рекурсивно и сохранить его разрешения?
  • Поиск новых строк в одном файле по сравнению с другими
  • Есть ли способ использовать sed или awk для фильтрации данных внутри заархивированного файла?
  • One Solution collect form web for “Аудиофайлы, измененные командой bash, переименовывая их”

    Вы использовали следующую команду

     find ./ -type f -exec sed -i -e 's/_/./g' {} \; 

    Что это в основном делает

     sed -i -e 's/_/./g' filename 

    для каждого файла, найденного командой find . sed проходит через ваши файлы, строка за строкой и команду s (substitute), заменяет каждый _ на a . , И поскольку вы используете флаг -i , это происходит внутри. Неудивительно, что ваши файлы повреждены!

    Вы не сможете воспроизвести старые файлы. Вы изменили _ , и .. to . , Все, что вы знаете, это все . в ваших файлах, может быть одним из этих символов (или a . ).

    Linux и Unix - лучшая ОС в мире.