Способ 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
этого not ( -v
) start ( ^
) с необязательным *
пробелом ( \s
), за которым следует буквальный #
символ. -P
Флаг выбрать PCRE как диалект регулярных выражений (что позволяет , \s
которые я считаю более удобным для чтения , чем традиционный [[:space:]]
).
- Команда
xargs
делит свои входные данные (которые являются выходными grep
данными) на завершенные символом новой строки поля ( -d '\n'
), а затем вставляет каждое поле (без завершающего символа новой строки) в качестве отдельного аргумента в конце команды mv -t 'Glorious Destination Folder'
, которую она выполняет.
-ok
ИМХО лучший ответВот небольшой скрипт (
mv-confirm.sh
):Образец использования:
не забудьте сделать скрипт исполняемым (
chmod +x mv-confirm.sh)
.NB
Поскольку я не хочу связываться с вашими файлами, я добавил
echo
перед фактическойmv
командой. Не стесняйтесь удалить его для фактического перемещения файлов.источник