У меня есть файловая система, смонтированная только для чтения, который имеет много файлов со специальными символами как &
, (
и "
. Я хотел бы скопировать рекурсивно все файлы и папки к внешнему экс-толстому использованию объема cp -R
но когда я пробую, я получаю много ошибок, которые похожи:
cp: cannot create regular file ‘/media/How About Better Parents?.pdf’: No such file or directory
Существует ли способ скопировать эти имена файлов, которые содержат допустимые но специальные символы?
Вы могли сделать это на шагах, создав список файлов и нового имени каждого. Необходимо было бы, вероятно, создать целевые каталоги сначала. Если структура каталогов является относительно плоской, Вы могли бы сделать это вручную с 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
сначала для наблюдения то, что это сделает.
Необходимо будет использовать файловую систему кроме exFAT. В соответствии со статьей Wikipedia, допустимые символы в именах файлов:
Unicode UTF-16 кроме
- U+0000 (NUL) через U+001F (США)
/
(наклонная черта)\
(обратная косая черта):
(двоеточие)*
(звездочка)?
(Вопросительный знак)"
(кавычка)<
(меньше, чем)>
(больше, чем)|
(канал)