Ответы:
Команда
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вам мешают перезаписать.