方法1:在图形文件浏览器中,使用树状视图
我假设您的实际目标是为每个文件做出选择,而不是严格按照提示进行选择。但是,如果希望在终端中提示有关每个文件的信息,请参阅下面的方法2。
大多数图形文件浏览器都支持树状视图,您可以在其中一起查看目录层次结构的多个级别。您可以将文件复制或移动到该视图之外,可以单独或通过选择它们,然后对整个选择进行操作。即使来自多个文件夹的文件也可以使用。
在某些文件浏览器中,必须进入“首选项”菜单才能启用树视图。在MATE文件浏览器Caja中,始终在列表视图中启用它。单击查看→列表(或按Ctrl+ 2)切换到列表视图。每个目录在其左侧都有一个向右的小三角形,表示可以扩展。要展开文件夹,请单击该三角形,或在→选择文件夹后按(向右箭头)键。在此示例中,我一个一个地选择了它们,并立即将它们全部拖到目的地:
假设源和目标位于同一驱动器上,则默认情况下拖动动作。如果您想复制,则按住该Ctrl键。
从理论上讲,使用此方法时很容易纠正错误,因为大多数文件浏览器(包括Caja)都支持Ctrl+ Z撤消最近的操作,包括批处理操作。但是,我对此感到好运。有时文件会回到错误的文件夹中。
好消息是,您似乎正在处理大多数文本文档,而文本文档通常较小,因此您可以先进行一次额外的备份而tar
不会遇到很多麻烦。无论您使用哪种方法,我都建议这样做。
方法2:将find
与指令-ok
动作
find
查找文件并将它们的路径传递给带有-exec
和-execdir
操作的任意外部命令是常见的用法。而且在每次运行命令之前find
都有-ok
and -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
恕我直言最好的答案