Использование 'cp' и сохранение атрибутов каталога, но не копирование его дочерних элементов

Я делаю программу синхронизации файлов. Чтобы повысить эффективность синхронизации, у меня есть синхронизация / копирование только новых файлов / папок из источника. В любом случае, когда я копирую каталоги в синхронизацию, я использую 'cp pR itemName, потому что он сохраняет атрибуты каталога и значок (если он присутствует). Но, к сожалению, он также копирует все содержащиеся в этом каталоге файлы... Я не хочу, чтобы дети копировались (за исключением некоторых невидимых файлов), я хочу копировать по одному элементу за раз. Есть ли способ, которым я могу программно скопировать каталог сам по себе (не включая его дочерние файлы), но при этом сохранив его атрибуты (например, Дата создания и значок)?

1 ответ

Решение

Вы хотите использовать rsync. Rsync создает список всех файлов и копирует только те, которые были изменены. Это действительно быстро. я делаю

rsync -avzr filesIwant WhereItShouldGo

но, чтобы ответить на ваш вопрос, вы можете перечислить файлы и исключить тот, который вам не нужен, с помощью grep и с помощью xargs, запустите свое действие. Допустим, вы запустили LS, и это то, что вы получили

#:~ cy$ ls
BackEnd         Downloads       Pictures
CSC 130         Library         Public
Checkbook.java      Movies          Site and Code
Desktop         Music           Sites
Documents       NetBeansProjects

и скажем, что вы хотели все, но не все в папке музыки или в папке фильмов, которую вы можете сделать:

#:~ cy$ ls | grep -v Music | grep -v Movies
BackEnd
CSC 130
Checkbook.java
Desktop
Documents
Downloads
Library
NetBeansProjects
Pictures
Public
Site and Code
Sites

Обратите внимание, фильмы и музыка не были перечислены. Теперь вы можете запустить xargs и выполнить действие. Так как я не хочу ничего удалять, я не собираюсь этого делать, но это то, на что это похоже

#:~ cy$ ls | grep -v Music | grep -v Movies| xargs -I xx cp xx  ToSomePlace

команда -I для xargs берет ввод из последней команды и дает ему псевдоним, в моем случае "xx", чтобы вы могли вызывать команды в xx, зная, что они являются элементами последней команды. Надеюсь, что это помогло.

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