cp --reflink=auto для MacOS X

Для этого я придумал следующую команду:

find ~/.ssh/ -type f -exec grep -l "PRIVATE" {} \; | xargs ssh-add &> /dev/null

Это найдет все файлы в каталоге .ssh , которые содержат PRIVATE , передав имя / путь файла закрытого ключа в ssh- добавить .

2
22.09.2016, 11:25
4 ответа

К сожалению, опция --reflink=autoеще не была доступна в MacOS. HFS также изначально не поддерживает CoW (Copy on Write ).

Возможно, в будущем такая поддержка будет добавлена, -вероятно, когда ZFS станет изначально доступной или другая собственная файловая система добавит поддержку.

Я предлагаю обратиться к справочной странице, чтобы получить доступные вам параметры:man cp


ПРИМЕЧАНИЕ:

В MacOS большинство команд (, включая cp), поддерживают только короткие параметры, а не длинные. Таким образом, если бы существовал эквивалент, то это был бы только один символ. Примером может быть -Lили --dereference, доступный в версии cpGNU coreutils. В MacOS доступно только -L.

1
27.01.2020, 21:59

Новая файловая система Apple APFS поддерживает копирование -при записи -; CoW автоматически включается в операциях копирования Finder, где это возможно, и при использовании cp -cв командной строке.

К сожалению, cp -cэквивалентно cp --reflink=always(, а не auto), и произойдет сбой, если копирование -на -запись невозможна с

cp: somefile: clonefile failed: Operation not supported

Я не знаю, как получить autoповедение. Вы можете создать сценарий или функцию оболочки с автоматическим откатом а-ля

cpclone() { cp -c "$@" || cp "$@"; }

но будет сложно сделать его полностью надежным для всех пограничных случаев.

5
27.01.2020, 21:59

Обновлено в ноябре 2021 г. :Этот ответ устарел из-за грядущих изменений coreutils. reflink=auto используется по умолчанию с 25725f9(coreutils 9.0 ). Клонирование APFS зафиксировано в дереве как 5e36c0c и должно отображаться в coreutils 9.1.


Исходное сообщение, ноябрь 2019 г. :Я написал исправление(список рассылки)для GNU coreutils, который включает --reflinkдля macOS > 10.12. Да, --reflink=autoбудет работать, по крайней мере, согласно моим измерениям времени.

Вот два способа его использования:

  • клонируем репозиторий git, запускаем ./bootstrap, а затем обычные ./configure -Cи make -j12 install.
  • Примените патч (, перебазированный для версии 8.31 ), к другой версии coreutils, чтобы избежать мучительной начальной загрузки.

Вы можете взять множество возможных параметров для использования из формулы домашнего приготовления . Поскольку изменение полезно только для cpи mv, вы можете заменить только эти два двоичных файла.(mvс reflink полезно для подмодулей.)


Существует связанный патч , который также включает reflink=auto по умолчанию для cpи install. Если вы все время забываете добавить эту опцию или хотите быстрее ginstallв ваших файлах Makefile, попробуйте ее.

4
27.01.2020, 21:59

uutils — это клон GNU coreutils, написанный на Rust, и поддерживает копии рефлинков в APFS macOS с помощью того же синтаксиса, что и GNU coreutils в Linux.

1
18.09.2021, 10:37

Теги

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