Шлях 1: у вашому браузері графічних файлів, використовуючи подання дерева
Я припускаю, що ваша реальна мета - зробити вибір для кожного файлу, а не строго кажучи, щоб його запросили . Однак, якщо вам більше потрібне запит про кожен файл у терміналі, див. Спосіб 2 нижче.
Більшість веб-переглядачів графічних файлів підтримують перегляд дерева, де ви можете переглядати кілька рівнів ієрархії каталогів разом. Ви можете скопіювати або перемістити файли з цього представлення, окремо, або вибравши їх, а потім оперуючи всім виділенням. Це працює навіть з файлами з декількох папок.
У деяких браузерах файлів потрібно перейти в меню налаштувань, щоб увімкнути дерево. У Caja, браузері файлів MATE, це завжди увімкнено у поданні списку. Клацніть Перегляд → Список (або натисніть Ctrl+ 2), щоб перейти до подання списку. Кожен каталог має невеликий правокутний трикутник ліворуч від нього, що означає, що його можна розширити. Щоб розгорнути папку, натисніть цей трикутник або натисніть клавішу →(стрілка вправо), коли вибрано папку. У цьому прикладі я вибрав їх по одному і перетягнув їх відразу за призначенням:
Якщо припустити, що джерело та пункт призначення перебувають на одному диску, перетягуючи ходи за замовчуванням. Якщо ви хочете скопіювати натомість, натисніть Ctrlклавішу.
Теоретично виправити помилки при використанні цього методу, оскільки більшість файлових браузерів (включаючи Caja) підтримують Ctrl+ Zскасовувати останні дії, включаючи пакетні дії. Однак у мене була змішана удача з цим. Іноді файли повертаються в неправильну папку.
Хороша новина полягає в тому, що, здається, ви працюєте з текстовими документами, які, як правило, невеликі, тому ви можете зробити додаткову резервну копію, tar
спочатку без зайвих клопотів. Я пропоную зробити це незалежно від того, який метод ви використовуєте.
Спосіб 2 : find
Команда з -ok
дією
Це звичайне використання find
для пошуку файлів і передачі їх шляхів до довільної зовнішньої команди за допомогою -exec
і -execdir
дій. Але find
також є -ok
та -okdir
підказка перед кожним запуском команди. Якщо ви дійсно хочете, щоб вас запросили в терміналі про кожен файл, я думаю, що це шлях.
Коли це зроблено для отримання тих же ефектів, що показано вище, це виглядає приблизно так:
ek@Gnar:~$ find Texts -xtype f -ok mv -t 'Glorious Destination Folder' {} \;
< mv ... Texts/Robert Frost/New Hampshire.pdf > ? y
< mv ... Texts/Robert Frost/In The Clearing.pdf > ? n
< mv ... Texts/Helen Keller/The Story of My Life.pdf > ? y
< mv ... Texts/Saki/The Short Stories of Saki.pdf > ? y
< mv ... Texts/Jane Austen/Sense and Sensibility.pdf > ? n
< mv ... Texts/Jane Austen/Pride and Prejudice.pdf > ? y
< mv ... Texts/Richard Connell/The Stolen Crime.pdf > ? n
< mv ... Texts/Richard Connell/The Most Dangerous Game.txt > ? y
< mv ... Texts/Mary Wollstonecraft Shelley/Mathilda.epub > ? n
< mv ... Texts/Mary Wollstonecraft Shelley/Frankenstein: Or, The Modern Prometheus.pdf > ? y
< mv ... Texts/W. E. B. Du Bois/The Souls of Black Folk.pdf > ? n
< mv ... Texts/W. E. B. Du Bois/Darkwater: Voices from within the Veil.htm > ? y
Замініть Texts
на вихідний каталог (який може бути, .
якби ви cd
до нього) і Glorious Destination Folder
фактичним каталогом призначення.
Це виконує одну команду на файл; в відміну від -exec
і -execdir
, -ok
і -okdir
не підтримують +
в місці , \;
щоб пройти кілька шляхів , знайдених в тому ж виклику команди. Отже, вам не потрібно використовувати -t dest
форму mv
. Я пропоную робити це в будь-якому випадку, хоча, як в цілому з find
і особливо в цій ситуації , так що підказки виглядають як команди вони спонукали о.
Оскільки ця команда написана, якщо find
зустрічається символічне посилання, яке в кінцевому підсумку вказує на звичайний файл, воно (посилання, а не ціль) переміщується, а не ігнорується. Якщо ви дійсно хочете оперувати лише одним звичайним файлом, використовуйте -type f
замість цього -xtype f
.
Ви можете зробити це на script
сеансі, щоб ви могли зрозуміти, що сталося, якщо ви помилитесь. Але знову ж таки, ніяких причин не мати резервної копії.
Спосіб 3: Створіть маніфест і відредагуйте його
Принаймні до тих пір, поки у файлах немає нових рядків у своїх іменах, ви можете почати, використовуючи просту find
команду для створення маніфесту --файлу, який перелічує імена файлів, які вас (у цьому випадку потенційно) цікавлять :
find Texts -xtype f >manifest
Замініть manifest
на будь-яке ім’я файлу, у якому перераховані файли, що розглядаються (і відповідно відрегулюйте інші вказівки).
Як зазначено вище, замініть Texts
свою фактичну каталогію джерела, що могло б бути, .
якщо ви хочете cd
до неї. Однак якщо Texts
це відносний шлях (у тому числі, якщо він є .
), то ви повинні переконатися, що ви знаходитесь в тому самому місці пізніше, коли ви дійсно виконуєте рухи.
Після запуску цієї find
команди відкрийте manifest
в текстовому редакторі. Це може бути nano
, vim
, emacs
, gedit
, pluma
і т.д. У редакторі закоментуйте ліній, назва файлів , які ви НЕ хочете , щоб рухатися, поставивши #
на початку їх. Деякі редактори підкреслять ці рядки по-різному, навіть якщо він не визнає, що ваш файл має будь-який формат, він знає, що має коментарі. Хоча більшість не буде, і справжня причина, яку я пропоную зробити так, полягає в тому, що ви, як людина, швидше за все, будете мати досвід коментувати рядки у файлах конфігурації (і, можливо, у вихідному коді). Я думаю , що це більш інтуїтивним, і менше помилок, ніж це було б , щоб відзначити рядки , які ви дійсно хочете перемістити.
Звичайно, ви можете замість цього просто видалити рядки для файлів, які ви не хочете переміщувати. Перевага коментувати їх полягає в тому, що згодом буде зрозуміло, що ви зробили.
У моєму прикладі так виглядав вміст файлу після його редагування:
Texts/Robert Frost/New Hampshire.pdf
# Texts/Robert Frost/In The Clearing.pdf
Texts/Helen Keller/The Story of My Life.pdf
Texts/Saki/The Short Stories of Saki.pdf
# Texts/Jane Austen/Sense and Sensibility.pdf
Texts/Jane Austen/Pride and Prejudice.pdf
# Texts/Richard Connell/The Stolen Crime.pdf
Texts/Richard Connell/The Most Dangerous Game.txt
# Texts/Mary Wollstonecraft Shelley/Mathilda.epub
Texts/Mary Wollstonecraft Shelley/Frankenstein: Or, The Modern Prometheus.pdf
# Texts/W. E. B. Du Bois/The Souls of Black Folk.pdf
Texts/W. E. B. Du Bois/Darkwater: Voices from within the Veil.htm
Тоді ви можете відфільтрувати коментовані рядки grep
та xargs
передати результат, щоб передати їх mv
:
grep -Pv '^\s*#' manifest | xargs -d '\n' mv -t 'Glorious Destination Folder'
Як зазначено вище, замініть Glorious Destination Folder
ім'я фактичного пункту призначення. Це воно; ваші файли переміщені. Ви, звичайно, можете написати echo
раніше, mv
щоб побачити команди, які будуть запускатися першими, якщо вам подобається.
Команда працює так:
- У
grep
команді виводить рядок з , manifest
які НЕ ( -v
) почати ( ^
) з додатковим ( *
) (пропуском \s
) , за яким слід буквальному #
характер. -P
Прапор вибрати PCRE як діалект регулярних виразів (що дозволяє , \s
які я вважаю більш зручним для читання , ніж традиційний [[:space:]]
).
xargs
Команда ділить свій вхід (який є виходом grep
) в нового рядка із завершальним полів ( -d '\n'
), а потім вставляє кожне поле (без завершального перекладу рядка) як окремий аргумент в кінці команди mv -t 'Glorious Destination Folder'
, якій вона працює.
-ok
ІМХО найкраща відповідь