Изменение определенных строк с помощью sed

Ответ Анкида был принят, но в основном это неправильно. Да, поиск также выполняет поиск в каталоге lcommands, но, как вы можете видеть из части скриншота перед поиском, каталог lcommands уже содержит три файла PDF, прежде чем команда find вышла.

Что действительно происходит: find -exec cp приводит к команде cp ./lcommands/abc.pdf lcommands/. Так как ./lcommands является именно каталогом lcommands (./ совпадает с ././, то же, что и ./././././, так же, как и каталог, в котором вы находитесь), это приведет к копированию abc.pdf который cp отказывается, поскольку это приведет к поврежденному файлу назначения (по крайней мере, для файлов, больших, чем буфер cp, длинный).

Представьте, как работает cp: он открывает исходный файл, читает фрагмент, открывает целевой файл (обрезает его, если он должен существовать и не быть пустым), записывает предыдущий фрагмент чтения в файл назначения; то он будет читать следующий фрагмент исходного файла, но все, кроме первого фрагмента, уходит из-за предыдущей операции усечения. Поэтому авторы cp старались обнаружить любую ситуацию, когда исходный и целевой файлы совпадают.

cp не жалуется, что файл уже существует - он бы с радостью перезаписал его! За исключением дополнительной опции -i или -n. Итак, ответ Ankid верен, даже если он может быть не очень подробным и не помог вам поэтому.

То же самое с двумя другими файлами PDF.

Чтобы сделать это как можно более ясным: cp не жалуется, потому что файл (ы) назначения существует, но поскольку он (они) является именно исходным файлом. И это именно то, о чем говорится в сообщении об ошибке.

1
задан 3 May 2013 в 16:22

0 ответов

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

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