Как я могу получить mv (или подстановочный знак) для перемещения скрытых файлов?

Например, чтобы временно отключить клавиатуру для очистки:

$ xinput float id #; sleep t; xinput reattach id # master #

t [!d2 ] в секундах

id # и master #, как указано выше (например, на моем ноутбуке:

$ xinput float 11; sleep 5; xinput reattach 11 3 [ ! d11]

Я просто добавил это, потому что мне все время нравится чистить клавиатуру. Я должен перезагрузиться, поэтому я это обнаружил!

1
задан 14 June 2014 в 17:21

6 ответов

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

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
20
ответ дан 25 May 2018 в 01:13
  • 1
    Хорошие моменты, @AndrewSchwartz. Мне тоже нравится этот подход. Я думаю, что он заслуживает большего признания. – Randall Cook 28 July 2015 в 08:00

Если вы ls -l в каталоге, вы увидите . и .. среди перечисленных файлов. Итак, я думаю, что mv .* /dest учитывает эти указатели. Попробуйте:

mv /tmp/home/rcook/{*,.[^.]*,..?*} /home/rcook/

это будет игнорировать те указатели указателей на текущий и родительский.

Вы получите ошибку, если любой из трех паттернов *, [^.]* или не соответствует файлу, поэтому вы должны включать только те, которые соответствуют.

9
ответ дан 25 May 2018 в 01:13

Два возможных решения, о которых я могу думать. Первый заключается в использовании cp вместо этого с его рекурсивной опцией, копирование текущего каталога в пункт назначения.

cp -Rp . /desired/directory

, тогда вы можете удалить исходные файлы в текущем каталоге

В качестве альтернативы, если вы знаете, что файлы называются безопасными (без пробелов, подстановочных знаков, непечатаемых символов) вы можете сделать что-то вроде этого

mv $(ls -A) /desired/directory
4
ответ дан 25 May 2018 в 01:13
  • 1
    Copy-then-remove сильно отличается от перемещения, если источник и цель находятся в одной файловой системе. По крайней мере, включите опцию -p для сохранения метаданных. Использование ls должно быть последним средством, и здесь есть более простые, более простые способы. – Gilles 14 June 2014 в 18:04

На Linux нет такой вещи, как «скрытые» файлы. Файлы, начинающиеся с точки, по умолчанию скрыты от списков файлов.

Чтобы скопировать файлы даже с помощью glob, вам необходимо префикс файла с помощью ., например mv -u .* foo, а затем .foo будет отображаться как foo/.foo при перемещении.

Параметр -u будет перемещать файлы только в том случае, если источник более новый, или адресата отсутствует. Или вы можете просто игнорировать ошибки в перемещении . и .., поскольку они являются специальными файлами и не могут быть перемещены, но они попадают в .* glob оболочкой.

2
ответ дан 25 May 2018 в 01:13
  • 1
    Пожалуйста, ознакомьтесь с дополнениями, которые я поставил в нижней части моего вопроса. Благодарю. – Randall Cook 22 February 2013 в 01:25

Итак, мы имеем:

a
|-- .foo
`-- bar

и:

b

Я потратил огромное время на лучшее решение, чем все ответы здесь.

Тогда я взял огромный для этой команды:

$ mv --help

Тогда я нашел свою любовь:

$ mv a/ b/ -T

Примечание: Я даже не понимаю аргумента -T. Он просто сделал то, что мне нужно. Здесь он говорит:

-T, --no-target-directory рассматривает DEST как обычный файл
0
ответ дан 25 May 2018 в 01:13
  • 1
    Если вы опускаете косые черты, вам не нужно -T. В любом случае это, по существу, говорит mv, чтобы переместить сам каталог, а не перемещать все файлы изнутри. – thomasrutter 28 July 2015 в 04:52
  • 2
    @thomasrutter, не перемещает каталог сам по себе, как переименование? – Randall Cook 28 July 2015 в 07:52
  • 3
    Да, если родительский пункт назначения остается прежним, он просто переименовывает его. Однако вы ссылаетесь на него, вероятно, это не помогает ответить на исходный вопрос, связанный с перемещением файлов внутри каталога в заданное место. – thomasrutter 29 July 2015 в 03:17

Если вы хотите скопировать файлы, включая скрытые файлы, в текущий каталог, в котором вы находитесь.

cp -Rp source-directory/. .
-1
ответ дан 25 May 2018 в 01:13
  • 1
    Это очень похоже на ответ Дрейка Кларриса с 2013 года. У вас есть что добавить? – Randall Cook 6 September 2016 в 08:02

Другие вопросы по тегам:

Похожие вопросы: