Я миграция мой домашний каталог со старой системы на новую, а в архив я сделал содержится все, включая скрытые файлы, такие как .bashrc следующее. Однако, когда я переместить содержимое распакованного архива (которые находятся в /tmp) в моей новой домашней директории, скрытые файлы не скопировать (МВ /tmp/и домой/rcook/* /главная/rcook/`). Как я могу получить МВ, чтобы переместить их?
На самом деле, я думаю, что проблема не с мВ, а с Баш'ы подстановка. Если я делаю это:
mkdir a
mkdir b
touch a/.foo
touch a/bar
mv a/* b/
ls -a a/ b/
Я вижу это:
a/:
. .. .foo
b/:
. .. bar
а/.фу не двигаться. Так как я могу сделать подстановочный знак"*", чтобы найти скрытые файлы?
Да, я думаю, можно распаковать архив прямо в корневой каталог, но архив распаковывается в доме/rcook/..., и я хочу быть уверена, что переписать новое
.bashrc и проч. со старым, адаптированных версиях, и зная, как найти и переместить скрытые файлы-это стоящее умение. Предложения?
Некоторые ответы предполагают, делает что-то вроде МВ в src/.* дест/
. Тем не менее, я попытался это на моем тестовом каталогах и получил ошибки. Начиная с:
rcook$ ls -a a/ b/
a/:
. .. bar .foo
b/:
. ..
rcook$ mv a/.* b/
mv: cannot move 'a/.' to 'b/.': Device or resource busy
mv: cannot remove 'a/..': Is a directory
rcook$ ls -a a/ b/
a/:
. .. bar
b/:
. .. .foo
Что я делаю не так?
Вы можете сделать это :
shopt -s dotglob
mv /tmp/home/rcook/* /home/rcook/
Вы можете поставить
shopt -s dotglob
в `~/.bashrc и если вы хотите быть по умолчанию.
См http://mywiki.wooledge.org/glob
Другой подход для копирования файлов Dot:
mv /tmp/home/rcook/.[!.]* /home/rcook/
Дон'т использовать шаблон ..*
так как он соответствует ..
(указатель на родительский каталог). Если есть файлы, имя которых начинается с точки (..что-то), а также использовать шаблон
..?*`.
В добавок, у тебя есть ошибки, но код еще работал. Единственное, что можно добавить, это то, что вы сказали, это <и>только в</я>, Чтобы скопировать файлы Dot. Попробуйте:
mv src/* src/.* dst/
Вы все еще получаете ошибки для . и записи.., и это нормально. Но движение должно получится.
~/scratch [andrew] $ mv from/* from/.* to/
mv: cannot move ‘from/.’ to ‘to/.’: Device or resource busy
mv: cannot remove ‘from/..’: Is a directory
~/scratch [andrew] $ ls -a from/ to/
from/:
. ..
to/:
. .. test .test
Если Вы команды ls -l
в каталог, вы увидите .
и ..
среди перечисленных файлов. Так что, я думаю, МВ .* /дест принимает эти советы во внимание. Попробуйте:
mv /tmp/home/rcook/{*,.[^.]*,..?*} /home/rcook/
это будет игнорировать текущие и родительских указок реж.
Вы получите ошибку, если любой из трех моделей*
, [^.]*
или..?*` соответствует ни один файл, так что вы должны включать только те, которые соответствуют.
Два возможных решения я могу думать. Первый-это использовать вместо хп с параметром рекурсивной, копирование в папку назначения.
cp -Rp . /desired/directory
затем вы можете удалить исходные файлы в текущем каталоге
Кроме того, если вы знаете файлы здраво имени (без пробелов, маски, непечатные символы), вы можете сделать что-то подобное
mv $(ls -A) /desired/directory
Там isn'т действительно такая вещь, как "скрытые" у файлов в Linux. Файлы, начинающиеся с точки, скрытыми от файл списки по умолчанию.
Чтобы скопировать файлы даже с Глоб, вам нужно префикс файла с.
, например, МВ -у .* фу", а затем".ФОО будет appearn как
Foo/.фу`, когда переехали.
Параметр-u будет только перенести файлы, если источник новее, или адресат отсутствует. Или вы могли бы просто игнорировать сообщения о том, что движется .
и..
, поскольку они представляют собой особые файлы, и не может быть перемещен, но не попасть в .*
Глоб оболочкой.
Итак, мы имеем:
a
|-- .foo
`-- bar
и:
b
Я взял огромный найти лучшего решения, чем все ответы здесь.
Тогда я взял 30 секунд для этой команды:
$ mv --help
Потом я нашла свою любовь:
$ mv a/ b/ -T
Примечание: Я не'т даже понять аргумент -Т
. Он просто делал то, что мне нужно. Здесь он говорит:
В-Т-нет-цель-справочник лечить ДЕСТ как обычный файл
В моем случае я просто пытаюсь МВ
один скрытый файл, и это было решение:
Файл=.myHiddenFile МВ " в файл$на" дест/
Объяснение
Сначала я пытался:
МВ .myHiddenFile дест/
Но она продолжала производить ошибки:
МВ: не может стат '.myHiddenFile': Нет такого файла или каталога
Хотя команды ls -Аль показали, что файл и дест/
существовал.
Причина, по-видимому, потому, что снаряд был перевод в "" в имени файла, так и путем перевода их в переменную он избегает толкования. Есть наверное другие способы, чтобы решить эту проблему, но это было достаточно для нас.