
У меня есть папка, Accounts
содержащая почтовые аккаунты, все эти папки имеют папку Archive.folder
. Я хочу переместить все архивные папки с помощью простого скрипта в новую папку.
Я попробовал это на данный момент:
find . -mindepth 1 -maxdepth 1 ! -name archive -exec mv -t testnew/ {} +
Но он перемещает все папки, а не только те, которые называются archive. Я хочу найти все папки в текущей папке archive и переместить их в папку testnew/. Путь к перемещенной папке должен быть таким же, как и раньше.
Текущая ситуация:
Accounts
- 1
- archive
- inbox
- folder2
- 2
- archive
- inbox
- folder2
- 3
- archive
- inbox
- folder2
Как это должно выглядеть:
testnew
- 1
- archive
- 2
- archive
- 3
- archive
решение1
Если это нормально, то это vidir
может быть хорошим способом. Смотретьэтот ответ.
В вашем случае процедура будет такой:
cd /path/to/Accounts find . -type d -name archive | vidir -
vidir
запустит текстовый редактор. Используйте "поиск и замена" и замените все начальные символы./
на любой путь, который вы хотите, чтобы строки соответствовали желаемой структуре каталогов. Пути могут быть абсолютными или относительными, они могут содержать../
. Например, вы можете легко превратить это./1/archive ./2/archive ./3/archive
в это
../testnew/1/archive ../testnew/2/archive ../testnew/3/archive
Сохраните отредактированный файл и выйдите из редактора.
Примечания:
- Если ваша структура каталогов содержит каталоги с именами, заканчивающимися на
.
(так что./
подстрока появляется не только в начале), то лучше заменить<TAB>./
на<TAB>whatever/path/you/want/
, где<TAB>
указывает на символ табуляции. Это зависит от редактора, можете ли вы включить этот символ в «поиск и замена». - Выберите редактор, указав
EDITOR
, напримерfind … | EDITOR=kate vidir -
, . vidir
не может перемещать файлы между файловыми системами. Если всеarchive
каталоги принадлежат одной файловой системе, а вы хотитеtestnew
оказаться в другой файловой системе, то создайтеtestnew
в исходной файловой системе, используйтеvidir
и, наконец, переместитеtestnew
в целевую файловую систему.- В концеэто еще один ответесть экспериментальный подход, который (аб)использует,
EDITOR
чтобы сделатьvidir
неинтерактивным. ОднакоЯ нахожуvidir
полезным в таких случаях, как ваш, в основном потому, что это позволяет мне убедиться, что полученные пути действительно такие, какие я хочу, прежде чем произойдет какое-либо переименование/перемещение. Если я что-то испорчу, я могу прерваться, не сохраняя изменения.Если вам нужно неинтерактивное решение вашей проблемы, тоvidir
это не лучший инструмент.