cp только файлы, пропуская каталоги

870
eis

Использование cp для копирования файлов из каталога, в котором также есть пустой каталог, приводит к возвращаемому значению ошибки, что приводит к сбою моего сценария.

Есть ли способ просто пропустить каталоги, не возвращая ошибку? Я хотел бы, чтобы значение ошибки отражало любые ошибки, но наличие пустого каталога там должно быть просто пропущено, а не сообщаться как ошибка.

Я мог бы просто добавить рекурсивный флаг, -rно что, если я просто не хочу, каталог должны быть скопирован, но я действительно хочу, чтобы какая - либо ошибка сообщать?

2

1 ответ на вопрос

2
berserck

I suggest you to use rsync instead of cp, if you can it has the option -m that will exclude empty folders, example:

rsync -am <origin> <destination> 

Explanation of the command in explainshell.com

I'm using the -a option because it does a lot of nice default action, but if you want you can also use the -r option, that will set the recursive mode only.

[ADD comment]

I do not know of a way to do this with cp, at least the man page does not show any option that will do that for you. You probably can do a more complex solution by using the command find to find list of files/directories to copy, and then pass it to cp, but that would be much more complicated than rsync. rsync is even pretty much standard in many linuxes

Вы говорите, что это не может быть легко сделано с `cp`? Я предпочел бы использовать это, так как более ясно сразу понять, что он делает, но, конечно, если это не может быть использовано таким образом, я могу искать другие варианты. eis 8 лет назад 0