Что точно сделало mv/tmp/folder /*/*, делают к моей файловой системе?

Один способ использовать perl:

perl -lane 'printf qq[%s\n], join q[ ], sort @F' infile

Вывод:

ab bc
ab bc
bc cd ef
bc cd ef
ab bc cd
ab bc cd ef gh
4
18.06.2013, 22:41
3 ответа

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

В Вашем случае, mv /tmp/folder/* /* расширяется до mv <the list of files in /tmp/folder> <the list of files in />. Так, как можно предположить, все файлы в /tmp/folders/ и все файлы в / но последние были перемещены в последнюю папку, перечисленную /* (который является, вероятно, /var).

9
27.01.2020, 20:46
  • 1
    Если последний файл, перечисленный /* не был каталог, ничего не произойдет. –  lgeorget 18.06.2013, 22:03
  • 2
    ... поэтому, если бы я выполнил касание zzz перед каким-либо из этого, я был бы в порядке? Это весело, rofl. –  M L 18.06.2013, 22:27
  • 3
    @ML Да, или если Вы не делали этого как корня. Это - реальный урок для забирания домой. –  derobert 18.06.2013, 22:38
  • 4
    @lgeorget /var, нет /var/www. Сделать echo /* или ls -d /* видеть список. Вы, вероятно, сделали ls без -d, который вызывает ls перечислять содержание каждого каталога, данного как аргумент. –  derobert 18.06.2013, 22:40
  • 5
    и подстановочные знаки являются страшными вещами, урок должным образом отметил @derobert :) –  M L 18.06.2013, 22:45

Вы изображаете mvаргументы неправильно. Из страницы справочника:

SYNOPSIS  
      mv [OPTION]... SOURCE... DIRECTORY

mv берет многих SOURCE аргументы, но только одно место назначения DIRECTORY. mv не может переместить файл к нескольким местам назначения, или он должен был бы скопировать его. С тех пор (поскольку Вы сказали), /* разрешенный ко всем каталогам в /, все те (кроме последнего) были бы добавлены к SOURCE список, таким образом, Вы переместили все те каталоги в каталог, перечисленный в последний раз на командной строке.

Если Вы загружаетесь от LiveCD и монтируете диск, можно, вероятно, возместить убытки; будет только быть одним каталогом, оставленным в корне (вероятно, /var), и можно переместить все каталоги, которые должны быть в корне из него

5
27.01.2020, 20:46
  • 1
    Мы уже восстановили машину, но это хорошо для знания! Я предполагаю, что жесткая часть знает, какие потребности остаться в / var... или мы могли просто покрыть, копируют все в var к корневому каталогу... корни –  M L 18.06.2013, 22:44
  • 2
    Смотрите на en.wikipedia.org/wiki/Filesystem_Hierarchy_Standard для выяснения, какие каталоги должны остаться дома /var. –   18.06.2013, 22:53

Чтобы проверить, что именно сделала команда mv, вы можете проверить это, добавив echo перед командой, так что shell раскроет все подстановочные знаки и распечатает результат команды, например:

$ echo mv /tmp/folder/* /*

$ echo mv /tmp/* /*
mv /tmp/launch-4TgsLB /tmp/skl /bin /dev /etc /home /lost+found /mnt /net /opt /private /sbin /tmp /usr /var

Так что в основном это переместит ваши файлы в последнюю папку в вашей корневой системе, вероятно /var.

Читайте подробнее: Что mv * делает?

0
27.01.2020, 20:46

Теги

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