LinuxForum.Fans
Тема

Как скопировать содержимое папки, без самой папки

Автор: forroboform 18 сообщений 10995 просмотров
#273498

Нужно скопировать содержимое папки, без самой этой папки в другую папку.
В /var/www/ лежат: index.html и .htaccess

Вроде как все понятно: cp -rp /var/www/* ~/www/test4.ru/
В итоге в ~/www/test4.ru/ оказывается вся папка www.

Пробовал с другими ключами и комбинациями -> то копируется сама папка www с содержимым.
То копируется файл index.html ..... а файл .htaccess теряется ...

Как из папки скопировать только содержимое в другую папку?

#273500

[console]
lupo@gentoo-laptop ~ % mkdir -p /tmp/www /tmp/test4.ru
lupo@gentoo-laptop ~ % touch /tmp/www/index.html
lupo@gentoo-laptop ~ % touch /tmp/www/.htaccess
lupo@gentoo-laptop ~ % ls -al /tmp/www
итого 0
drwxr-xr-x 2 lupo lupo 80 Сен 4 11:16 ./
drwxrwxrwt 10 root root 360 Сен 4 11:16 ../
-rw-r--r-- 1 lupo lupo 0 Сен 4 11:16 .htaccess
-rw-r--r-- 1 lupo lupo 0 Сен 4 11:16 index.html
lupo@gentoo-laptop ~ % cp /tmp/www/* /tmp/test4.ru
lupo@gentoo-laptop ~ % ls -al /tmp/test4.ru
итого 0
drwxr-xr-x 2 lupo lupo 80 Сен 4 11:17 ./
drwxrwxrwt 10 root root 360 Сен 4 11:16 ../
-rw-r--r-- 1 lupo lupo 0 Сен 4 11:17 .htaccess
-rw-r--r-- 1 lupo lupo 0 Сен 4 11:17 index.html
[/console]

#273505

Использую Debian 6.0.5_Squeeze_ - Official i386 CD Binary-1 20120512-13:45



Вопрос остается открытым!
Теоретически можно было бы "забить" ... и копировать во вновь созданный домен целиком папку www со всем содержимым.
Но хочется "красиво" -> только содержимое и без самой папки ...

#273506

Покажите

text

alias
text

which ls
text

whereis ls
#273507

Честно говоря не совсем понял :) ... но вот:

#273508
"forroboform" написал:
Честно говоря не совсем понял ab

Просто думал, может, у вас на эту команду какой-нибудь алиас «хитрый» или команда cp «ненастоящая» ;)
А оболочка у вас какая?

#273510

Я имел в виду другое ;)
Покажите

text

echo $SHELL
#273511



Дистрибутив: Debian 6.0.5_Squeeze_ - Official i386 CD Binary-1 20120512-13:45
Команда ls -lia - всё видит!
Пробовал в исходную папку вставлять перед копированием вложенную папку с файлами index.html и .htaccess - рекурсивное копирование срабатывает ...
Но точно такой же .htaccess который лежит выше с такими же правами и от такого же пользователя - ни в какую копироваться не хочет ...
А если и копируется, то только с самой папкой в которой лежит!

#273512

в bash'е поведение звёздочки зависит от настроек... о том, как её настроить, чтобы она и скрытые файлы подцепляла, ЕМНИП есть в мане.
единственным способом гарантированно получить то, что надо является find:
find /src/dir/ -maxdepth 1 -exec cp -r '{}' /dest/dir/ \;

собственно man:

man bash написал:
The GLOBIGNORE shell variable may be used to restrict the set of file names matching a pattern. If GLOBIGNORE is set, each matching file name that also matches one of the patterns in GLOBIGNORE is removed from the list of matches. The file names ``.'' and ``..'' are always ignored when GLOBIGNORE is set and not null. However, setting GLOBIGNORE to a non-null value has the effect of enabling the dotglob shell option, so all other file names beginning with a ``.'' will match. To get the old behavior of ignoring file names beginning with a ``.'', make ``.*'' one of the patterns in GLOBIGNORE. The dotglob option is disabled when GLOBIGNORE is unset.

ну и пример:
[console]alexander@goblin /tmp $ mkdir test
alexander@goblin /tmp $ cd test
alexander@goblin /tmp/test $ touch qwe
alexander@goblin /tmp/test $ touch .qwe
alexander@goblin /tmp/test $ ls *
qwe
alexander@goblin /tmp/test $ echo $GLOBIGNORE

alexander@goblin /tmp/test $ shopt -s dotglob
alexander@goblin /tmp/test $ ls *
qwe .qwe
[/console]

#273513

Честно говоря не понял!
ls -a у меня работает исправно (показывает скрытые файлы) :)

Я не могу скопировать из папки А в папку => B файл .htaccess, без копирования целиком папки A.
Скопировать папку А (её саму со всем содержимым) в папку => B - проблем нет!

Если же в папку А положить папку С в которой будет лежать .htaccess, то он копируется ...
Получается "проблема звездочки в баш" не при чем?

#273514

Вставьте в файл ~/.bashrc строку

text
shopt -s dotglob

...и перезайдите в оболочку (либо для разового применения просто запустите эту команду в текущем сеансе). Теперь команда

text

cp -rp /var/www/* ~/www/test4.ru/

должна работать, как вы хотите.

#273516

Благодарю!
Звездочка заработала!
Fat-Zer и Lupo Alberto - вы Профи с большой буквы! :)

#273563

А вот у меня, например, tcsh. Можно двумя командами:

text

cp -rp /var/www/* ~/www/test4.ru/
cp -rp /var/www/.* ~/www/test4.ru/

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

text

ls -a | egrep "^[.][^./]"

но в нём будут и каталоги, если есть. Его можно заключить в ``
и передать команде cp.

Пётр.

#273586
"Peter" написал:
cp -rp /var/www/* ~/www/test4.ru/
cp -rp /var/www/.* ~/www/test4.ru/

плохой совет... ".*" метчит всё, включая и ".." и "."
правильнее было бы использовать: cp -rp /var/www/{.[^.]*,*} ~/www/test4.ru/
если выполняется в ручную, то обычно достаточно для скрытых пользовать .??* т.к. скрытые файлы с одним символом бывают где-либо редко...

но опять же... читаем про опасность поведения звёздочки в зависимости от шела и даже от его настроек...
+ она ещё опасна переполнением списка аргументов команды итп... так что в скриптах звёздочку использовать нельзя

#273695
Fat-Zer написал:
[quote="Peter"]cp -rp /var/www/* ~/www/test4.ru/
cp -rp /var/www/.* ~/www/test4.ru/

плохой совет... ".*" метчит всё, включая и ".." и "."
правильнее было бы использовать: cp -rp /var/www/{.[^.]*,*} ~/www/test4.ru/
если выполняется в ручную, то обычно достаточно для скрытых пользовать .??* т.к. скрытые файлы с одним символом бывают где-либо редко...

но опять же... читаем про опасность поведения звёздочки в зависимости от шела и даже от его настроек...
+ она ещё опасна переполнением списка аргументов команды итп... так что в скриптах звёздочку использовать нельзя[/quote]
Да, метит, но не копирует, только сообщает, что они пропущены, так что не опасно.

Пётр.

#273807

Да уж ... мне даже как то неудобно, что столько народу напряг "на пустом месте" :)
Перенастраивать баш (потом вдруг аукнется на другом) или использовать всякие "другие сложности" ...

Проще оставить всё как есть!
Копировать стандартным образом:
cp -rp /var/www/* ~/www/test4.ru/

А в настройках хоста прописывать не:
/www/test4.ru/
А на одну папку длиннее:
/www/test4.ru/www/

#352650
forroboform написал:
Нужно скопировать содержимое папки, без самой этой папки в другую папку.
В /var/www/ лежат: index.html и .htaccess
...
Как из папки скопировать только содержимое в другую папку?

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

text
cp -RTp /path/folder/otkuda /path/folder/kuda

Если папка kuda не существовала, она будет создана с правами текущего пользователя и атрибутами 755.
В папке kuda будет именно содержимое папки otkuda
А подсказали мне это специалисты хостинга MemHOST.

Войдите или зарегистрируйтесь, чтобы ответить.