Intereting Posts
Просмотр удаленного рабочего стола Ubuntu с Windows 7 Как подключиться к сеансу «screen» или начать новую команду Сохранение вывода stderr в переменной без модификации stdout и повторение этого действия Сценарий Bash не читает ввод Обновление версий ядра при загрузке из rEFInd В настоящий момент перестановка не поддерживается. Вы должны объединить объем, а затем снова установить его Fedora 20 memory.limit_in_bytes не работает Неверный символ Юникода Абсолютно заключить в тюрьму пользователя с минимальными правами доступа к IP, файлу и командам Как выполнить пользовательскую настройку вкладки bash? Использовать awk, чтобы найти первое вхождение Управление контейнерами LXC от хоста в марионетке Awk разделяет большой файл условно в нескольких выходных файлах Как бороться с конфликтующими именами двух разделяемых библиотек? Невозможно добавить PPA, застрял в gpg: keybox

Как скопировать файлы из списка имен файлов и безоговорочно сохранить существующий файл в месте назначения?

Как скопировать файлы из списка имен файлов и безоговорочно сохранить существующий файл в месте назначения?

Примечание. По умолчанию cpio перезаписывает старые существующие файлы:

$ dpkg -L libgcc1 libstdc++6 |grep -e '^/lib/' -e '^/usr/lib/' | cpio -pdv ./test ./test/lib/i386-linux-gnu cpio: ./test/lib/i386-linux-gnu/libgcc_s.so.1 not created: newer or same age version exists ./test/usr/lib/i386-linux-gnu cpio: ./test/usr/lib/i386-linux-gnu/libstdc++.so.6.0.22 not created: newer or same age version exists cpio: ./test/usr/lib/i386-linux-gnu/libstdc++.so.6 not created: newer or same age version exists 0 blocks $ touch -ht 200102030405 $(find . ) $ dpkg -L libgcc1 libstdc++6 |grep -e '^/lib/' -e '^/usr/lib/' | cpio -pdv ./test ./test/lib/i386-linux-gnu ./test/lib/i386-linux-gnu/libgcc_s.so.1 ./test/usr/lib/i386-linux-gnu ./test/usr/lib/i386-linux-gnu/libstdc++.so.6.0.22 ./test/usr/lib/i386-linux-gnu/libstdc++.so.6 3222 blocks $ #same version $ dpkg -L libgcc1 libstdc++6 |grep -e '^/lib/' -e '^/usr/lib/' | cpio -pdv ./test ./test/lib/i386-linux-gnu cpio: ./test/lib/i386-linux-gnu/libgcc_s.so.1 not created: newer or same age version exists ./test/usr/lib/i386-linux-gnu cpio: ./test/usr/lib/i386-linux-gnu/libstdc++.so.6.0.22 not created: newer or same age version exists cpio: ./test/usr/lib/i386-linux-gnu/libstdc++.so.6 not created: newer or same age version exists 0 blocks $ cp --version cp (GNU coreutils) 8.26 Copyright (C) 2016 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later . This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Written by Torbjorn Granlund, David MacKenzie, and Jim Meyering. $ 

Это невозможно сделать с помощью cpio .

Однако вы можете использовать star чтобы сделать работу. Просто позвони:

 star -xpk < archive-name 

Кстати: я не уверен, что GNU cpio ведет себя корректно, но cpio часто используется в управлении системой, потому что он имеет недокументированную функцию для извлечения файлов сначала во временное имя и, если это удалось, для вызова rename(2) для замены старого файла в неразрушающий путь. Таким образом, официальный cpio (не обязательно GNU cpio) ведет себя как программа install .

Если вы хотите получить такое поведение со звездочкой, добавьте опцию -install .