1

У меня есть около 1000 текстовых файлов, и мне нужно просмотреть каждый и переместить его в папку, если она правильная. Я могу выполнять только базовую сортировку по длине / размеру, и я не могу выполнить grep, потому что текст случайный. Как я могу это сделать, кроме ручного открытия + сохранения каждого в gedit. Я на Ubuntu Linux. Спасибо

Я уже сделал всю сортировку по размеру, количеству слов, greps, дате и т.д. Это то, что осталось. Я пытаюсь найти простой способ просмотра + сохранить / игнорировать остальные.

6 ответов6

5

Я предполагаю, что вы, вероятно, не используете vim ... так что, возможно, это послужит стимулом для его изучения, или, может быть, краткое руководство .....

$ vim *

откроет все файлы;

:!mkdir mine/; mkdir notmine/

создаст каталоги с именами "мой" и "notmine";

:!mv % mine/

переместит текущий файл в каталог с именем "mine";

:bdel

удалит этот файл из тех, с которыми имеет дело vim, и перейдет к следующему;

:!mv % notmine/

переместит текущий файл в каталог с именем "notmine". Что происходит с этими командами перемещения

  • : входит в режим командной строки
  • ! запускает команду оболочки
  • % вызывает замену vim в имени текущего файла. Если в имени любого файла есть пробелы, вам нужно будет заключить в кавычки аргумент % , например :!mv "%" mine/ .

Нажмите : затем b , затем стрелку вверх, чтобы снова получить команду :bdel .

Хит : тогда !mv , затем стрелка вверх несколько раз, чтобы перебрать ваш предыдущий !mv ... команды. Вы также можете просто набрать :! а затем стрелка вверх, но это получит !mkdir... команда тоже.

Если вы еще не догадались, стрелка вверх в "режиме командной строки" vim (то, что вы вводите, нажимая : в "обычном режиме"), заставит его пройти через предыдущие команды, которые начинаются с того, что вы уже набрал там.


Кроме того, в случае, если вы делаете это без какого-либо предыдущего опыта работы с vim, я должен сначала поблагодарить вас за такой смелый шаг, а затем продолжить, чтобы сообщить вам, что если в любой момент вы случайно нажали клавишу на клавиатуре и вы начинаете вводить что-то в файл, или что-то другое неожиданно работает, пару раз <ESC> , а затем u чтобы отменить любые изменения, которые вы сделали случайно. Если вы зайдете слишком далеко назад (на самом деле это не проблема для этого примера, поскольку вы не собираетесь изменять какие-либо файлы), вы нажмете <CTRL>-R чтобы повторить то, что вы просто отменили. <ESC> выведет вас из режима вставки или визуального режима обратно в обычный режим, где фактически работают все эти команды.


Хорошо ... после того небольшого PSA, вернемся к нашему регулярно запланированному программированию.

Чтобы сделать обработку файлов более эффективной, вы можете настроить несколько макросов:

qm:!mv % mine/<CR>:bdel<CR>q

Это фактически приведет к перемещению текущего файла и удалению его из "списка буферов" vim, поэтому убедитесь, что он один из ваших, когда вы устанавливаете этот макрос. Обратите внимание, что здесь <CR> означает, что вы нажали клавишу ВВОД в этой точке; на самом деле не печатать <CR>.

qn:!mv % notmine/<CR>:bdel<CR>q

То же самое здесь.

Затем, чтобы переместить файл в каталог "mine" и перейти в список буферов, вы делаете

@m

Или если это не твое

@n

На самом деле было бы разумнее сопоставить эти макросы с буквами, расположенными на клавиатуре дальше, чем m и n ... но это основная идея.

2

Как сказал Марк, вам нужно быть более точным в отношении файлов. Вместо gedit вы можете использовать less пейджер или head/tail для просмотра частей файла, а затем утилиту mv для его перемещения. Это должно сделать процесс немного быстрее.

Для программного подхода, в зависимости от размера файла и его размещения на одном экране, вы можете сделать что-то с помощью этой логики:

for each file in the directory
       print it's contents to the screen
       prompt for yes/no
       if yes
             move file to other directory
       else
             leave file alone

по сути, ваша программа будет показывать вам содержимое каждого файла, и если вы хотите, чтобы он был перемещен, нажмите Y , иначе нажмите N Таким образом, каждый файл может обрабатываться одним или двумя нажатиями клавиш, в зависимости от того, как вы его напишите.

2

Мне было скучно:

$ cat disposition
#!/bin/sh

# pick your preferred viewer
VIEWER=less
VIEWER=head

# the log file will actually be a script that undoes all the
# changes made, so it is more like an inverted log
log=/tmp/disposition.$$

prog=$0
dest=$1

case $# in
    0|1) echo "usage $prog dest_dir file ..."
         echo "  presents files and asks for a disposition"
         echo "  if disposition is 'yes' move it to dir"
         echo "  otherwise do nothing"
         exit 1;;
esac
# some shells may have limits on command lengths so for many files
# you might have to:
#    disposition dest_dir a*
#    disposition dest_dir b*
#    etc.

if [ ! -d $dest ] ; then
    echo "$prog: destination $dest is not a directory"
    exit 1
fi

cat > $log <<EOF
#!/bin/sh
# inverted log file created by $prog
#

EOF

shift           # toss away dest_dir from args
for file; do    # in "$@" is implied
    if (echo "===== $file =====" ; cat $file ) | $VIEWER; then
        read -p "move $file to $dest? " move
        case $move in
            [yY]*)
                echo mv \"$dest/$file\" \"$file\" >> $log
                mv "$file" "$dest/$file"
                ;;
        esac
    fi
done

echo "$prog: inverted log script can be found in $log"
1

Я предполагаю, что вы уже знаете это, но в интересах других, вы можете использовать голову (или хвост), чтобы показать первые несколько строк файла. Это будет более выполнимо, чем напечатать все это.

Ну и конечно же напиши bash скрипт =)

с фоном программирования, я думаю, что это было бы вполне достаточно для программирования такого сценария http://tldp.org/LDP/abs/html/internal.html

(и я достаточно ленив, чтобы не написать)

1

Мне было интересно, могут ли наивные байесовские классификаторы применяться к коду и найти Преподобного DivMod. Что поразило меня, так это строка:

* is your code more like Guido's or Peter's 

Выглядит немного постарше, но опять же Преподобный Байес тоже не молодеет. Он доступен как пакет Ubuntu Python-Rererend, но я слишком сонный, чтобы подкласс распознавателя прямо сейчас.

0

Не могли бы вы более точно сказать, почему grep не отвечает вашим потребностям? Если не существует заметного "метода безумия", то единственный способ - это рука. Вы не можете автоматически / программно сортировать вещи, если нет условий, которые вы можете предоставить для сортировки.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .