Ответы:
Команда
mv !(new) new
должен сделать свое дело. Если это не работает, запустите shopt -s extglob
сначала.
Чтобы также переместить скрытые файлы / каталоги (начинающиеся с точки), shopt -s dotglob
сначала запустите также .
Итак, подведем итог:
shopt -s extglob dotglob
mv !(new) new
shopt -u dotglob
(всегда лучше сбрасывать, dotglob
чтобы избежать неприятных сюрпризов).
!(something)
?
dev
в мое текущее местоположение, мне нужно выполнить mv !(dev) dev
? Я получаю-bash: !: event not found
setopt extendedglob
установить расширенный режим glob в zsh. ^
является символом исключения, поэтому mv ^new new
сделал бы свое дело. затем, чтобы увидеть все параметры, установленные в zsh, которые вы можете использовать, setopt
и отключить режим расширенного глобуса, который вы можете сделатьunsetopt extendedglob
Я нашел что-то вроде этого, но это немного проще для понимания, и это может хорошо работать и для вас:
ls | grep -v new | xargs mv -t new
Добавление объяснения к вышеуказанному решению:
С man-страниц:
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
в целевой каталогmv: illegal option -- t
. Это потому что я пользуюсь zsh
?
mv
(то есть ваша версия mv отличается от той, которую я использовал), какую ОС вы используете? Я считаю , что , когда я писал этот ответ , я был на дистрибутиве с centos
помощью bash
.
mv: illegal option -- t
потому что у mv osx нет -t
опции.
zsh
, так что это, вероятно, ОС тогда ..? Спасибо за разъяснение!
Простая идея Предполагая , что вы находитесь в / MyUser , переименовывать загрузки в новый , создать новый загрузок каталог затем переместить новый в него.
mv downloads new # downloads is now called new
mkdir downloads # create new directory downloads
mv new downloads # move new into it.
Если вы хотите переместить все файлы из папки в одну из ее подпапок, вы можете использовать следующую команду:
find /myuser/downloads/ -type d -name 'new' -prune -type f | xargs mv -t /myuser/downloads/new
Он найдет все файлы и затем переместит их в вашу подпапку.
@waltinator: добавлено -type d -name 'new' -prune
для предотвращения обхода /myuser/downloads/new
.
new
и попробовал эту команду, я получаю mv: missing file operand
иTry 'mv --help' for more information
Вы можете попробовать этот альтернативный процесс - остаться на пути
/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
в downloads`.
Однако, если у вас уже есть 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
и, поскольку вы хотите «переместить все файлы и папки / подпапки в папке загрузок в подпапку [ new
]», все готово! Если вы хотите переместить только файлы (или только папки или [вставить более детализированное движение объекта]), вам придется использовать другие команды, которые могут «фильтровать» объекты, например grep
. Команды, написанные выше, достаточно для ваших целей.
mv * new
, он будет скулить "не может перейти с нового на новое" или что-то подобное. Возможно,mv -i * new
вам мешают перезаписать.