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/
Вы можете увидеть здесь процедуру, которой я следовал, и структуру каталогов:

3 ответа
Команда find также будет искать в каталоге lcommand любые экземпляры PDF-файлов. Поскольку файлы были скопированы, файлы PDF были скопированы в каталог; найти придумал предупреждение.
Ответ Анкида был принят, но в основном он ошибочен. Да, поиск также ищет lcommands каталог, но, как вы можете видеть из скриншота, прежде чем найти, каталог lcommands уже содержит три файла PDF, прежде чем была выполнена команда поиска.
Что на самом деле происходит: find -exec cp приводит к команде cp ./lcommands/abc.pdf lcommands/, Поскольку./lcommands - это точно lcommands каталог (./ такой же как ././, такой же как ./././././, так же, как каталог, в котором вы только что), это приведет к копированию abc.pdf над собой, который cp отказывается, потому что это приведет к повреждению файла назначения (по крайней мере, для файлов больше, чем cpБуфер длинный).
Представь как cp работает: он открывает исходный файл, читает чанк, открывает файл назначения (обрезает его, если он должен существовать и не должен быть пустым), записывает предыдущий фрагмент чтения в файл назначения; тогда он будет читать следующий фрагмент исходного файла, но все, кроме первого фрагмента, исчезнет из-за предыдущей операции усечения. Так что авторы cp старался обнаружить любую ситуацию, когда исходный и целевой файл совпадают.
cp не жалуюсь, что файл уже есть - он с радостью перезапишет его! Кроме того, вы дополнительно использовали опцию -i или же -n, Таким образом, ответ jpic является правильным - даже если он может быть не очень подробным и поэтому не помог вам.
То же самое с двумя другими файлами PDF.
Чтобы сделать это как можно более понятным: cp не жалуется, потому что файл (ы) назначения существуют, но потому что это (они) именно исходный файл (ы). И это именно то, что говорится в сообщении об ошибке.
Это ошибка (код возврата 1) из cp:
>>> cp foo foo
cp: `foo' and `foo' are the same file
<<< 11:33.40 Sat Aug 04 2012!~
1
Что означает, что cp ничего не делал.