Ubuntu - как скопировать файлы и папки, которые содержат специальные символы

У меня есть файловая система, смонтированная только для чтения, который имеет много файлов со специальными символами как &, ( и ". Я хотел бы скопировать рекурсивно все файлы и папки к внешнему экс-толстому использованию объема cp -R но когда я пробую, я получаю много ошибок, которые похожи:

cp: cannot create regular file ‘/media/How About Better Parents?.pdf’: No such file or directory

Существует ли способ скопировать эти имена файлов, которые содержат допустимые но специальные символы?

0
задан 9 June 2016 в 06:47

2 ответа

Вы могли сделать это на шагах, создав список файлов и нового имени каждого. Необходимо было бы, вероятно, создать целевые каталоги сначала. Если структура каталогов является относительно плоской, Вы могли бы сделать это вручную с mkdir -p path. Если существует много каталогов, но они не содержат пробелы или недопустимые целевые символы, которые Вы могли использовать (скажите от / DVD до / медиа),

cd /media ; ( cd /dvd ; find . -type d ) | xargs mkdir -p

Это размещает Вас в целевой каталог (готовый к mkdir) и затем перечисляют все каталоги ниже исходного каталога, отправляя каталоги к mkdir. Вы можете использовать find опция -print0 вместе с xargs опция -0 если Вам нужны пробелы в именах каталогов.

Затем используйте find для создания списка файлов, которые будут скопированы, скажите с

cd /dvd ; find . -type f | sed 's/\(.*\)/cp "\1" "\1"/' > /tmp/copy.sh

Затем отредактируйте файл /tmp/copy.sh замена всех запрещенных символов на целевые имена. Для каждого имени файла sed команда вставляет cp перед ним, затем имя файла в двойных кавычках (источник) и имя файла в двойных кавычках снова (цель). После того как у Вас есть этот взгляд приемлемого, делают copy.sh исполняемый файл и выполненный это.

Отказ от ответственности: поскольку всегда возможно скопировать файлы в неправильное место, заполнить файловую систему, и т.д., так попробуйте несколько команд вручную и проверьте результат прежде, чем выполнить общую массу их. Вы могли протестировать xargs mkdir команда путем попытки xargs echo mkdir сначала для наблюдения то, что это сделает.

3
ответ дан 23 December 2019 в 17:23

Необходимо будет использовать файловую систему кроме exFAT. В соответствии со статьей Wikipedia, допустимые символы в именах файлов:

Unicode UTF-16 кроме

  • U+0000 (NUL) через U+001F (США)
  • / (наклонная черта)
  • \ (обратная косая черта)
  • : (двоеточие)
  • * (звездочка)
  • ? (Вопросительный знак)
  • " (кавычка)
  • < (меньше, чем)
  • > (больше, чем)
  • | (канал)
2
ответ дан 23 December 2019 в 17:23

Другие вопросы по тегам:

Похожие вопросы: