Я использую CentOS7 и когда я использую команду
cp /root/test/.* /root/test1
он также копирует ..
все файлы и папки в родительском каталоге источника.
Как избежать копирования .
и ..
?
решение1
В вопросе прямо не указано, хотите ли вы скопироватьтолькоскрытые имена, или вы хотите скопировать все файлы. Аналогично, хотите ли вы скопировать содержимое любых подкаталогов. Я предполагаю, что вы хотите скопироватьтолькоскрытое имя — это текущий каталог (потому что именно это вы, похоже, и хотите сделать с помощью своей команды).
Ваша команда не скопирует все файлы в родительском каталоге, если вы также не используете -R
опцию with cp
(или -r
with GNU cp
) для рекурсивного копирования. Без -R
опции cp
будет жаловаться на то .
, что и ..
являются каталогами, но и не будет копировать их.
В bash
оболочке установите GLOBIGNORE
переменную оболочки в :
список имен с разделителями, в которые оболочка не должна расширять шаблоны подстановки имен файлов,
GLOBIGNORE='.:..'
затем скопируйте ваши файлы,
cp /root/test/.* /root/test1
Чтобы временно установить GLOBIGNORE
только для операции копирования, используйте подоболочку:
( GLOBIGNORE='.:..'; cp /root/test/.* /root/test1 )
решение2
Стандартная идиома для подстановки всех имен, начинающихся с точки, за исключением и .
. Таким образом, ваша команда будет..
.??*
cp /root/test/.??* /root/test1