Відповіді:
Команда
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
для встановлення розширеного глобального режиму в zsh. ^
є символом виключення, і mv ^new new
це зробить трюк. потім, щоб побачити всі параметри, встановлені в zsh, які ви можете використовувати, setopt
і вимкнути розширений глобальний режим, який ви можете зробитиunsetopt extendedglob
Я знайшов щось подібне, але трохи простіше зрозуміти, і це може спрацювати і для вас:
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
до цільового каталогуmv: illegal option -- t
. Це тому, що я використовую zsh
?
mv
, (тобто ваша версія mv відрізняється від того, що я використовував) що OS ви використовуєте? Я вважаю , що , коли я писав цю відповідь , я був на дистрибутиві з centos
допомогою bash
.
mv: illegal option -- t
яка пов’язана з тим, що у mx 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
до завантажень ».
Однак якщо у вас вже 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
вам заважають переписувати.