2

Я установил WordPress на мой сервер CentOS.

Теперь внутри моей папки /var /ww /html у меня есть папка WordPress. Я хочу переместить все файлы из папки «wordpress» в родительский каталог, который называется /var /www /html.

Теперь я прочитал этот пост - Как переместить все файлы из текущего каталога в верхний каталог?

и я попробовал команды, предложенные там, и все, что говорит командная строка:

[root@servername wordpress]# mv * .[^.]* ..
mv: cannot stat `*': No such file or directory

Как мне переместить все файлы на один каталог?

3 ответа3

5

Если у вас есть bash 4+ (проверьте с помощью bash --version), вы можете просто использовать опцию оболочки dotglob, чтобы гарантировать, что глобусы содержат файлы, начинающиеся с . по умолчанию.

shopt -s dotglob ## activate dotglob
mv ./* ../
shopt -u dotglob ## deactivate dotglob

Помимо уменьшения объема мышления, которое вам нужно уделить этой задаче, она также имеет преимущество в том, что она достаточно умна, чтобы не соответствовать . и .. без вас возиться. Я предпочитаю предварить мои глобусы символом ./ чтобы любые имена файлов, начинающиеся с - не рассматривались как параметры.

Однако ваша ошибка указывает на то, что вы пытаетесь работать с пустым каталогом или хотя бы с тем, который содержит только точечные файлы. По умолчанию, если глобус не соответствует ни одному имени файла, bash отправляет его буквально в команду - и поскольку в каталоге нет файла с именем * , mv отправляет эту ошибку.

2

Сообщение указывает, что нет файлов, соответствующих '*'. Убедитесь, что в папке, из которой вы перемещаетесь, есть файлы или папки. Если только файлы или папки, начинающиеся с. существует, вы можете запустить команду mv .[^.]* .. чтобы переместить их на один каталог вверх. Убедитесь, что все файлы перемещены, запустив ls -la и убедитесь, что список содержит только эти (.) И выше (..) каталоги.

2

Как уже говорили другие, вы, вероятно, запускаете свою команду в пустом каталоге. Еще один способ сделать это (который просто потерпит молчание в пустой директории) - использовать действие find 's -exec :

find . -exec mv '{}' ../ \;

Это даст вам ошибку:

mv: cannot move `./' to `../.': Device or resource busy

Это потому, что я не ограничиваю find по типу файла, поэтому он также попытается переместить текущий каталог (.) И произойдет сбой. Вы можете спокойно проигнорировать эту ошибку, или вы можете указать, хотите ли вы все типы файлов и папок:

find . \( -type f -o -type d \)   -exec echo '{}' ../ \;

От man find:

  -exec command ;
          Execute command; true if 0 status is returned.
          All following arguments to find are  taken  to
          be  arguments to the command until an argument
          consisting of `;' is encountered.  The  string
          `{}'  is  replaced  by  the  current file name
          being processed everywhere it  occurs  in  the
          arguments  to  the  command, not just in argu‐
          ments where it is alone, as in  some  versions
          of  find.   Both  of these constructions might
          need to be escaped (with a `\') or  quoted  to
          protect them from expansion by the shell. 

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .