3

Я ошибочно добавил расширение .dcm для всех файлов на моем Mac, что привело к невозможности входа в систему на моем iCloud и в хранилище моих цепочек ключей.

Будучи настолько отчаянным , чтобы узнать решение восстановить свои первоначальные расширения файлов, но я только нашел ответы заменить .abc с .def расширений, которые не хочу. Я хочу удалить все избыточные расширения .dcm добавленные в каждый файл.

Есть ли способ просто удалить расширения .dcm для всех файлов (рекурсивно)?

Вот решения для замены файлов-исключений, которые я нашел:

for file in *.abc; do mv "$file" "${file%.abc}"; done
for old in *.abc; do mv $old basename $old .abc.ef; done

Они либо не рекурсивны, либо Bash (3.2x) говорит "плохая замена" / "команда не найдена".

1 ответ1

4

Это должно сделать это:

find / -type f -name '*.dcm' -exec sh -c 'mv -- "$0" "${0%.dcm}"' {} \;

Команда:

  • Рекурсы из /
  • Находит каждый файл с именем *.dcm
  • Выполняет небольшой вызов subshell с одним аргументом, именем файла ({})
  • … Который переименовывает файл ($0), используя mv
  • удаление кратчайшего соответствия (%) .dcm с помощью манипуляции со строками

Поместите echo перед mv чтобы увидеть, что он будет делать.

Если вы хотите работать без подоболочки, вы можете перейти к while:

find / -type f -name '*.dcm' -print0 | while IFS= read -r -d '' filename; do
  mv -- "$filename" "${filename%.dcm}"
done

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