|
1 / 1 / 0
Регистрация: 17.02.2016
Сообщений: 32
|
|
Работа команды "cp" для файлов с точками (скрытых)16.11.2016, 12:17. Показов 6572. Ответов 35
Метки нет (Все метки)
Здрасьте всем!
Чайник, поэтому сильно не ругайтесь. ) Разбираю работу команд оболочки bash по работе с файлами и каталогами в Ubuntu 16.04.1. Если использую команду удаления rm, то всё логично: rm * - удаляет все файлы, кроме "файлов с точкой". rm .* - удаляет все "файлы с точкой". Аналогично с переносом mv и с удалением каталогов rmdir. Но вот с копированием cp фигня какая-то. Если копировать файлы, то всё работает аналогично, но вот если каталоги... cp -r * dir - копирует все файлы и каталоги, кроме "файлов с точкой", НО! содержимое копируемых каталогов копируется полностью - и с точками и без точек. Ну может так оно и логично. А вот если засандалить точку со звёздочкой, то тут вообще ересь какая-то получается. cp -r .* dir - во-1, в целевой каталог копируются все каталоги и файлы из текущего каталога (с точками и без), во-2, кроме файлов и каталогов из текущего каталога в целевой каталог копируются файлы и каталоги находящиеся в каталоге на один уровень выше текущего (родительском), НО не копируется родительский каталог текущего. Так и должно быть?
0
|
|
| 16.11.2016, 12:17 | |
|
Ответы с готовыми решениями:
35
Удаление скрытых файлов и файлов только для чтения Программа для ПК - Просмотр скрытых системных файлов Поиск файлов на диске, за исключением скрытых файлов и папок |
|
Заблокирован
|
|
| 16.11.2016, 12:37 | |
|
Если ты запустишь команду ls -la, то увидишь, что есть в директории такие ссылки с названиями . и ..
Почитай про них. И аккуратней с точками.
1
|
|
|
1 / 1 / 0
Регистрация: 17.02.2016
Сообщений: 32
|
|
| 16.11.2016, 13:56 [ТС] | |
|
Спасибо!
Т.е. получается, что команда cp -r работает с дескрипторами текущего и родительского каталогов как с обычными каталогами? В отличии от mv? И там и там задаю отбор по .*, а результат совершенно разный! Ну почему? (с) Проверил в CentOS - аналогично!!! Первые авторы утилит разные, остальные двое одинаковые.
0
|
|
|
Заблокирован
|
||||||||
| 16.11.2016, 15:14 | ||||||||
0
|
||||||||
|
1 / 1 / 0
Регистрация: 17.02.2016
Сообщений: 32
|
|||
| 17.11.2016, 10:10 [ТС] | |||
|
А результаты для mv .* и cp -r .*. Ессно они должны быть разные - перенос и копирование. ) Поскольку в целевой директории должен быть одинаковый результат, поэтому сравниваю эти команды. А результат в целевом каталоге у меня разный получается. Не знаю как из виртуалбокса копипастить, поэтому дам скрины.
0
|
|||
|
2796 / 2039 / 682
Регистрация: 02.03.2015
Сообщений: 6,509
|
||
| 17.11.2016, 10:50 | ||
|
siffok, Кончайте страдать ерундой. Вам уже порекомендовали про
0
|
||
|
1 / 1 / 0
Регистрация: 17.02.2016
Сообщений: 32
|
|||
| 17.11.2016, 12:54 [ТС] | |||
|
Разбираю азы и наталкиваюсь на непонятку: гляжу в учебники - ноль без палочки, читаю мануал - никаких ремарок. Знаете - подскажите, нет - спокойно пройдите мимо. Так же всё отлично работает при копировании командой cp без ключа -r. Т.е. шаблон "звезда с точкой" - и файлы только с точкой копируются, шаблон "звезда" - копируются только "видимые" файлы. Но стоит добавить ключ -r, как шаблон "звезда с точкой" начинает обрабатывать дескриптор родительского каталога как каталог (по моим предположениям) и в целевой каталог копируются (никто ничего не выдёргивает не из под кого) файлы и каталоги из родительского... Вот для чистоты эксперимента провёл все манипуляции "свыше" - ничего не изменилось, т.е. тащит содержимое родительского Провёл ещё несколько опытов увеличив глубину - не буду засорять скринами - аналогично. Вывод для себя сделал: Если пользоваться командой cp -r с шаблоном .* - надо готовиться к сюрпризам! ЗЫ Может кто в контакте с разработчиками: хотелось бы узнать -это фича, баг или мои кривые руки? )
0
|
|||
|
Заблокирован
|
||||||||
| 17.11.2016, 14:01 | ||||||||
|
.. является директорией. Поэтому cp в нее зайдет так же, как в любую другую. Начинается обход с самой первой - . Текущая. Соответственно, в ней находятся все твои директории и файлы. Копируются. Потом придет очередь .. это тоже директория, в нее тоже нужно зайти и скопировать. А без рекурсии - только файлы. Что тут не так?
0
|
||||||||
|
2796 / 2039 / 682
Регистрация: 02.03.2015
Сообщений: 6,509
|
|||||
| 17.11.2016, 16:26 | |||||
|
Если .. — это ссылка на каталог выше, почему Вас удивляет что ср переходит по этой ссылке (т.к. включена опция --recursive) и
0
|
|||||
|
1 / 1 / 0
Регистрация: 17.02.2016
Сообщений: 32
|
|
| 18.11.2016, 11:19 [ТС] | |
|
Ок. Всё понятно.
А именно надо запомнить следующее: Команда cp -r не работает с шаблонами так как работают команды cp, mv. - "вилька, тарелька" (с) Полное (всех файлов и каталогов) копирование возможно только каталогом, т.е. необходимо прописывать относительный путь с уровня не ниже родительского или абсолютный путь. Никогда не использовать скрытые файлы и каталоги, чтобы не заложить мину. Использовать ссылки: ссылками настраиваем абсолютные пути, а в скриптах работаем со ссылками - так проще переносить скрипты из среды в среду или восстанавливать работоспособность при её изменении. Рекурсия (вложение) работает "во вне", потому что дескриптор родительского каталога (..) туда показывает. Отсюда становиться ясно, почему во вложении обрабатываются все файлы и каталоги (с точкой и без) - по сути работает конвеер, т.е. ключи не передаются, как команда sudo. Почему-то в мануале cp ключи -R и -r идентичны, что навевает на мысли. Всем спасибо!
0
|
|
|
Заблокирован
|
||
| 18.11.2016, 12:17 | ||
|
cp -r .* вызывается не с шаблоном .*, а с перечнем файлов и директорий, имена которых начинаются с точки. Прям со списком, а не с шаблонов. Вот со именами, как они есть. А не с шаблоном. Не с шаблоном. Шаблоны команда не обрабатывает эта. Она получается список имен. Список. Не шаблон. А список.
0
|
||
|
2796 / 2039 / 682
Регистрация: 02.03.2015
Сообщений: 6,509
|
||
| 18.11.2016, 12:42 | ||
0
|
||
|
1 / 1 / 0
Регистрация: 17.02.2016
Сообщений: 32
|
|||
| 18.11.2016, 14:33 [ТС] | |||
|
Т.е. если оболочка переварила шаблон как смогла, а именно дескриптор родительского каталога (..), точнее запись дескриптора, восприняла как ссылку на его содержание, то команда получила список файлов родительского каталога и его обработала. Правильно? Получается Линукс - это совсем другой мир, в котором одним и тем же инструментом можно делать всё что угодно! Всем огромное Спасибо! Живое общение с преподавателем никогда не заменит мертвый учебник.
0
|
|||
|
Заблокирован
|
||
| 18.11.2016, 15:03 | ||
|
0
|
||
| 18.11.2016, 20:40 | |||
|
Не по теме:
0
|
|||
|
1 / 1 / 0
Регистрация: 17.02.2016
Сообщений: 32
|
||
| 22.11.2016, 10:57 [ТС] | ||
|
Стереотипы работы с разными ОС и подходы их создателей очень сложно ломать.
Поэтому умолчания у всех разные. Мне, "окошечнику" нужно понять ваши (линуксоидные) умолчания, а вам это не нужно, поэтому я всегда буду не прав и это данность (ведь знания нужны мне, а не вам). И это не лирика. Для меня открытие, то что команда копирования может выдавать такое - половину книжку изучил, теперь закрепляю, но про то что дескрипторы могут так обрабатываться не написано, потому что оно по-умолчанию.
0
|
||
|
Заблокирован
|
|
| 22.11.2016, 11:04 | |
|
0
|
|
|
1 / 1 / 0
Регистрация: 17.02.2016
Сообщений: 32
|
||
| 22.11.2016, 11:18 [ТС] | ||
|
Никак не пойму какую кнопку жмакать для мультиплицирования...
И даже попытка отдельных ответов потеряла вторую половину поста, поэтому уж как есть. Благодаря Вам, теоретическое наставление nimazzzy сложилось в понимание. К тому же частный случай здесь везде, а именно: Вернёмся к нашему барану: cp. Это команда по описанию копирует файлы и каталоги, но без ключей (-R, -r, --receyrsive) копировать каталоги отказывается. Но почему тогда она сообщает о том что не скопировала каталог, если её об этом не просили? Понимаю что "вопрос не по зарплате", но именно этот частный случай и ввёл меня в заблуждение - ну сообщает команда что она пропустила (.) и (..) - значит так и надо сообщать - даже мысли не было что я ошибаюсь в использовании шаблона! Копирую файлы cp * dir, а в ответ прилетает cp: пропускает каталог 'aaa', но ведь команды на копирование каталога не было? Картинку вставлять не буду - смысла нет. ЗЫ Прошу прощения что много букоф - хочу донести мысль без искажений, но всё равно умолчания своё дело делают. (
0
|
||
|
Заблокирован
|
||
| 22.11.2016, 11:34 | ||
|
cp aaa dir Если она промолчит, ты подумаешь, что все ок, и aaa скопировалось в dir. Но это же не так! Так что, ее поведение крайне правильное. Сказать, что переданное ей имя - это директория, но из-за отсутствия опции рекурсии, ее она не копирует. Все логично до жути
1
|
||
|
2796 / 2039 / 682
Регистрация: 02.03.2015
Сообщений: 6,509
|
|
| 22.11.2016, 11:59 | |
Сообщение было отмечено Marinero как решение
Решение
Всё станет намного понятнее если Вы поймете, что именно такое каталог в Линукс. Упрощенно это просто файл со списком «находящегося в нем» (которое на самом деле находится на диске и никаким образом не соотносится с каталогом). Поэтому копировать каталог без содержимого (не рекурсивно) нет смысла, вот система и напоминает, что в том, что Вы отдали на копирование («*») есть каталоги, но система их пропустила (потому как нет смысла), но обязана предупредить (потому как в команде присутствовали).
Почитайте ещё про «жесткие» и символические ссылки — это тоже поможет.
1
|
|
| 22.11.2016, 11:59 | |
|
Помогаю со студенческими работами здесь
20
Отключить отображения расширения файлов и скрытых системных файлов Как осуществить поиск файлов только скрытых или только для чтения Удаление скрытых файлов Обход скрытых файлов Обнаружение скрытых файлов Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|