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