Использование '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, зная, что они являются элементами последней команды. Надеюсь, что это помогло.