Відповіді:
Команда
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вам заважають переписувати.