
我有大约 1000 个文本文件,我需要查看每个文件,如果正确则将其移动到文件夹。我只能按长度/大小进行基本排序,并且无法 grep,因为文本是随机的。除了在 gedit 中手动打开并保存每个文件外,我还能如何做到这一点。我在 Ubuntu Linux 上。谢谢
我已经根据大小、字数、greps、日期等完成了所有排序。这是剩下的。我正在尝试找到一种简单的方法来查看 + 保存/忽略其余部分。
答案1
我猜你可能用不到vim
...所以也许这只是作为学习它的动力,或者是一个简短的教程.....
$ vim *
将打开所有文件;
:!mkdir mine/; mkdir notmine/
将创建名为“mine”和“notmine”的目录;
:!mv % mine/
将把当前文件移动到名为“mine”的目录中;
:bdel
将从 vim 正在处理的文件中删除该文件并转到下一个;
:!mv % notmine/
将当前文件移动到名为“notmine”的目录。这些移动命令的作用是
:
进入命令行模式!
启动 shell 命令%
导致 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>
此处表示您当时按下了 ENTER 键;实际上不打字<CR>
。
qn:!mv % notmine/<CR>:bdel<CR>q
同样如此。
然后要将文件移动到“我的”目录并在缓冲区列表中移动,你可以这样做
@m
或者如果它不是你的
@n
实际上,将这些宏映射到键盘上比m
和更远的字母可能更明智n
,但这是基本想法。
答案2
正如 Mark 所说,您需要对文件进行更具体的说明。除了使用 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
。这样,每个文件都可以通过 1 或 2 次击键来处理,具体取决于您的编写方式。
答案3
我很闷:
$ 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"
答案4
我想知道朴素贝叶斯分类器是否可以应用于代码,然后发现DivMod 的牧师让我印象深刻的是其中的一句话:
* is your code more like Guido's or Peter's
它看起来有点老了,但 Reverend Bayes 也不再年轻了。它以 Ubuntu 软件包 python-reverend 的形式提供,但我现在太困了,没法子类化识别器。