cp: `./lcommands/cde.pdf 'и` lcommands / cde.pdf' - это один и тот же файл

Я пытаюсь узнать о команде find. Я хотел бы понять значение этого предупреждения:

ankit@battlestar:/home/mount_150/studies$ find -iname "*.pdf" -exec cp -ar {} lcommands/  \;
cp: `./lcommands/june.pdf' and `lcommands/june.pdf' are the same file
cp: `./lcommands/cde.pdf' and `lcommands/cde.pdf' are the same file
cp: `./lcommands/abc.pdf' and `lcommands/abc.pdf' are the same file
ankit@battlestar:/home/mount_150/studies$ ls -l lcommands/

Здесь вы можете увидеть процедуру, которой я следовал, и структуру каталогов:

enter image description here

2
задан 11 September 2017 в 13:27

3 ответа

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

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

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

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

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

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

0
ответ дан 11 September 2017 в 13:27

Это ошибка (код возврата 1) из cp :

>>> cp foo foo
cp: `foo' and `foo' are the same file
<<< 11:33.40 Sat Aug 04 2012!~ 
1

Это означает, что cp ничего не делал.

0
ответ дан 11 September 2017 в 13:27

Команда find также ищет в каталоге lcommand любые экземпляры PDF-файлов. Поскольку файлы были скопированы, файлы PDF были скопированы в каталог; найти придумал предупреждение.

0
ответ дан 11 September 2017 в 13:27

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

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