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

Я нахожусь по пути:

/myuser/downloads/

И я создаю подпапку:

/myuser/downloads/new

Теперь я хочу переместить все файлы и папки / подпапки в загрузках папку в подпапку.

Как я могу это сделать?

Я пытался:

mv -R *.* new/

Но движение, похоже, не требует переключателя -R.

71
задан 31 December 2011 в 16:38

6 ответов

Команда

mv !(new) new

должна добиться цели. Если это не работает, сначала запустите shopt -s extglob.

Чтобы также переместить скрытые файлы / каталоги (начинающиеся с точки), сначала запустите также shopt -s dotglob.
Итак, подведем итог:

shopt -s extglob dotglob
mv !(new) new
shopt -u dotglob

(всегда лучше сбросить dotglob, чтобы избежать неприятных сюрпризов).

0
ответ дан 31 December 2011 в 16:38

Я нашел что-то вроде этого, но немного проще для понимания, и это может хорошо сработать и для вас:

ls | grep -v new | xargs mv -t new

Добавление объяснения к вышеуказанному решению:

От человека страницы:

  • mv -t

    -t, --target-directory=DIRECTORY
          move all SOURCE arguments into DIRECTORY
    
  • grep -v

    -v, --invert-match
          Invert the sense of matching, to select non-matching lines.
    

Объясняется пошагово:

  • ls перечислит файлы в текущем каталоге
  • grep -v new вернет канал, который не соответствует новому
  • xargs mv -t new переместит переданные ему файлы из grep -v в целевой каталог
0
ответ дан 31 December 2011 в 16:38

Простая идея. Предполагая, что вы находитесь в / myuser , переименуйте загрузок в новый , создайте новый каталог загрузок , затем переместите новый в него.

mv downloads new # downloads is now called new
mkdir downloads # create new directory downloads
mv new downloads # move new into it.
0
ответ дан 31 December 2011 в 16:38

Вы можете попробовать этот альтернативный процесс - остаться в пути

/myuser/downloads/

, но вместо того, чтобы сначала создать каталог /myuser/downloads/new/, вместо этого создайте папку в каталоге /myuser/ с помощью команды mkdir ../new, затем переместите все файлы из downloads в new и, наконец, переместите new в downloads. Вы можете сделать это в одной строке, находясь в пути /myuser/downloads/, с помощью команды:

mkdir ../new && mv * ../new && mv ../new ../downloads

В этом случае вам не нужно беспокоиться о какой-либо «фильтрации» файлов / папок, поскольку new находится на том же уровне пути, что и downloads, так что вы можете просто переместить все из downloads в new, а затем переместить new в загрузку`.

Однако, если вы уже создали подпапку new и не хотите создавать другую, не беспокойтесь - просто измените команду mkdir в левой части первой && в команда, показанная выше для команды mv, толкающая new вверх по пути; другими словами, пока вы все еще находитесь в /myuser/downloads/, вы можете изменить mkdir ../new на mv new ... Затем подпапка new [в пути /myuser/downloads/new/] перемещается до /myuser/new/ на том же уровне, что и /myuser/downloads/, и затем вы можете выполнить остальную часть команды, как показано выше. Все вместе мы имеем, начиная с пути /myuser/downloads/:

mv new .. && mv * ../new && mv ../new ../downloads

и, поскольку вы хотели «переместить все файлы и папки / подпапки в папке загрузок в подпапку [[ 1129]] ", все готово! Если бы вы хотели переместить только файлы (или только папки или [вставить более детальное перемещение объекта]), то вам пришлось бы использовать другие команды, которые могут «фильтровать» объекты, такие как grep. Приведенные выше команды достаточны для ваших целей.

0
ответ дан 31 December 2011 в 16:38

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

find /myuser/downloads/ -type d -name 'new' -prune -type f | xargs mv -t /myuser/downloads/new

Он найдет все файлы и затем переместит их в вашу подпапку. [ 114]

@waltinator: добавлено -type d -name 'new' -prune для предотвращения обхода /myuser/downloads/new.

0
ответ дан 31 December 2011 в 16:38

Просто используйте mv * subdir1 и игнорируйте предупреждение.

Вы можете просто использовать mv * subdir1 . Вы увидите предупреждающее сообщение, касающееся попытки переместить subdir1 в себя, например:

mv: cannot move 'subdir1' to a subdirectory of itself, 'subdir1/subdir1'

Но все остальные файлы и каталоги будут перемещены в subdir1 правильно.

Пример:

$ ls
$ mkdir dir1 dir2 dir3      
$ touch file1.txt file2.txt file3.txt
$ mkdir subdir1
$ ls
#=> dir1  dir2  dir3  file1.txt  file2.txt  file3.txt  subdir1
$ mv * subdir1
#=> mv: cannot move 'subdir1' to a subdirectory of itself, 'subdir1/subdir1'
$ ls
#=> subdir1
$ ls subdir1
#=> dir1  dir2  dir3  file1.txt  file2.txt  file3.txt
11
ответ дан 26 January 2020 в 05:42

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

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