我正在尝试查找最近x分钟内修改的文件,例如在最后一小时内.网上的许多论坛和教程建议使用带有-mmin选项的find命令,如下所示:
find . -mmin -60 |xargs ls -l
但是,这个命令对我不起作用.从下面的清单中可以看出,它还显示了早于1小时前修改过的文件:
-rw------- 1 user user 9065 Oct 28 23:13 1446070435.V902I67a5567M283852.harvester
-rw------- 1 user user 1331 Oct 29 01:10 1446077402.V902I67a5b34M538793.harvester
-rw------- 1 user user 1615 Oct 29 01:36 1446078983.V902I67a5b35M267251.harvester
-rw------- 1 user user 72365 Oct 29 02:27 1446082022.V902I67a5b36M873811.harvester
-rw------- 1 user user 69102 Oct 29 02:27 1446082024.V902I67a5b37M142247.harvester
-rw------- 1 user user 2611 Oct 29 02:34 1446082482.V902I67a5b38M258101.harvester
-rw------- 1 user user 2612 Oct 29 02:34 1446082485.V902I67a5b39M607107.harvester
-rw------- 1 user user 2600 Oct 29 02:34 …Run Code Online (Sandbox Code Playgroud) 我如何使用linux find命令搜索更多MIN和更少MAX的搜索文件
我尝试使用以下命令:
find . -type f -a -size +1000 -a -size -1100
Run Code Online (Sandbox Code Playgroud)
但它不起作用
Debian 8的find命令的手册页说:
如果整个表达式不包含-prune或-print以外的任何操作,则对整个表达式为true的所有文件执行-print.
那么为什么这些产出不同:
$ mkdir -p test/foo test/bar && cd test && touch foo/bar bar/foo
$ # Test 1
$ find . -name foo -type d -prune -o -name foo
./foo
./bar/foo
$ # Test 2
$ find . -name foo -type d -prune -o -name foo -print
./bar/foo
Run Code Online (Sandbox Code Playgroud)
所以测试1:表达式是否包含"除-prune或-print之外的其他动作?" 好吧,除了修剪,是的,这句话是真的,没有行动.所以这些结果是预期的,因为对于选项./foo之前的表达式-o返回True,所以它被打印出来.
但测试2:表达式是否包含"除-prune或-print之外的其他操作?" 好吧,不包括修剪和印刷品,是的,该陈述再次成立,没有其他行动.所以我希望得到相同的结果.
但我没有得到./foo.为什么?
就好像手册页应该是:"如果整个表达式不包含-prune以外的任何动作 或打印,-print对整个表达式为真的所有文件执行."
我在Mac上,我不想使用内置xargs实用程序.因为它与gnu不同xargs.谷歌周围我发现xargs属于findutils自制软件包,我可以用一个简单的命令安装它brew install findutils.我的问题是,它有一个更简单的方法来识别xargs属于findutils?
谢谢.
关于正确处理包含换行符等奇怪符号的文件名有很多说法。我认为使用 IFS 设置为换行符通常可以解决问题,但显然,如果名称中包含换行符,则情况除外。因此,作为一种防御手段,脚本可以首先检查子树是否至少有一个带有换行符的文件,然后停止并显示一条消息以首先修复名称。令人惊讶的是我无法find用火柴做到这一点-regex。成功的唯一途径是相当丑陋
find . -name "*"$'\n'"*"
Run Code Online (Sandbox Code Playgroud)
但例如find . -regex ".*\n.*"不起作用。Emacs 正则表达式应该允许像 \n 这样的转义字符,不是吗?n有趣的是,它与名称中带有字符的另一个文件相匹配。尝试了不同的 -regextypes 只是发现类型awk sed posix-extended和更多类型将文件与换行符匹配(比方说a\nxxx),但此外它们也会将文件与字符匹配n。诡异的。另一方面,GNU find 文档没有说明任何有关转义字符(如\n. 它们真的不受支持,因此我们无法\t \n \r \a在 find regexps 中使用和类似的功能吗?
我想解压多个文件,
使用此答案,我找到了以下命令。
find -name '*.zip' -exec sh -c 'unzip -d "${1%.*}" "$1"' _ {} \;
如何通过上述命令使用 GNU Parallel 解压缩多个文件?
编辑 1:根据用户Mark Setchell提出的问题
文件在哪里?
所有的 zip 文件通常都在一个目录中。
但是,根据我的假设,该命令会根据 find 命令中给出的深度递归/非递归地查找所有文件。
文件是如何命名的?
abcd_sdfa_fasfasd_dasd14.zip
你通常如何解压缩一个?
unzip abcd_sdfa_fasfasd_dasd14.zip -d abcd_sdfa_fasfasd_dasd14
我目前正在使用Git Bash导航文件目录和编辑文件。我想知道是否有命令在当前目录及其中的所有目录中搜索文件名。
做什么find -mtime -4和find -mtime +4做什么?我无法理解手册页中给出的示例。
我正在Linux上工作,并且有一个文件夹,其中包含许多子目录。我需要删除所有具有相同名称的子目录。例如,
dir
|---subdir1
|---subdir2
| |-----subdir1
|---file
Run Code Online (Sandbox Code Playgroud)
我要删除全部subdir1。这是我的脚本:
find dir -type d -name "subdir1" | while read directory ; do
rm -rf $directory
done
Run Code Online (Sandbox Code Playgroud)
但是,我执行了它,但是似乎什么也没发生。
我也尝试过find dir -type d "subdir1" -delete,但仍然没有任何反应。
使用GNU findutils,我需要在目录树中搜索某个文件.如果找到了给定分支的文件,我想阻止find进一步递归到分支.假设我想找到文件foo,这是我的目录树:
??? a
? ??? a1
? ? ??? foo
? ??? foo
??? b
??? c
??? foo
Run Code Online (Sandbox Code Playgroud)
鉴于我正在搜索上面的树,我想找到一个/ foo和c/foo.但是,我不想找到/ a1/foo,因为我已经在a1的父目录中找到了foo.看来我应该使用-prune标志来查找命令,我发现这个链接https://unix.stackexchange.com/questions/24557/how-do-i-stop-a-find-from-descending-into-例如,found-directories,但我不能让它工作.我的尝试包括:
$ find -name foo -type f -prune
./a/a1/foo <- Unwanted hit
./a/foo
./c/foo
Run Code Online (Sandbox Code Playgroud)
和
$ find -name foo -type f -prune -exec find ../foo -type f {} \;
find: paths must precede expression: ./a/a1/foo
Usage: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expression]
find: paths must precede expression: ./a/foo
Usage: find [-H] …Run Code Online (Sandbox Code Playgroud)