标签: find

如何通过脚本中的变量将“*”通配符传递给 find 命令的路径参数?

我想用来find在一组受通配符限制的文件夹中查找文件,但路径名中有空格。

从命令行,这很容易。以下示例均有效。

find  te*/my\ files/more   -print
find  te*/'my files'/more  -print
find  te*/my' 'files/more  -print
Run Code Online (Sandbox Code Playgroud)

例如,这些将在terminal/my files/more和 中找到文件tepid/my files/more

但是,我需要将其作为脚本的一部分;我需要的是这样的:

SEARCH='te*/my\ files/more'
find ${SEARCH} -print
Run Code Online (Sandbox Code Playgroud)

不幸的是,无论我做什么,我似乎都无法find在脚本中的命令中混合使用通配符和空格。上面的示例返回以下错误(注意反斜杠的意外加倍):

find: ‘te*/my\\’: No such file or directory
find: ‘files/more’: No such file or directory
Run Code Online (Sandbox Code Playgroud)

尝试使用引号也会失败。

SEARCH="te*/'my files'/more"
find ${SEARCH} -print
Run Code Online (Sandbox Code Playgroud)

这将返回以下错误,忽略引号的含义:

find: ‘te*/'my’: No such file or directory
find: ‘files'/more’: No such file or directory
Run Code Online (Sandbox Code Playgroud)

这里再举一个例子。

SEARCH='te*/my files/more'
find ${SEARCH} -print
Run Code Online (Sandbox Code Playgroud)

正如预期的那样:

find: ‘te*/my’: No such file …
Run Code Online (Sandbox Code Playgroud)

scripts find wildcards

12
推荐指数
1
解决办法
5万
查看次数

如何用vi打开找到的文件?管道“查找”输出到 vi

我有一个文件,/home/user/important.txt. 为了找到它,我使用:

find /home/user -type f -name 'important'
Run Code Online (Sandbox Code Playgroud)

然后,我想使用管道在Vim编辑器中打开该文件。

我怎样才能做到这一点?

就像是

find /home/user -type f -name 'important' | vi
Run Code Online (Sandbox Code Playgroud)

vim console find

12
推荐指数
3
解决办法
8499
查看次数

使用“-exec rm -f {}\”时“查找:缺少`-exec'的参数”

我运行这个命令:

~/shell_temp$ find . -type f -name "IMAG1806.jpg" -exec rm -f {}\
Run Code Online (Sandbox Code Playgroud)

我得到以下输出:

> IMAG1806.jpg

Error:
find: missing argument to `-exec'
Run Code Online (Sandbox Code Playgroud)

从当前目录中查找任何文件并删除的确切命令是什么-exec

command-line find

12
推荐指数
2
解决办法
4万
查看次数

通配符是 shell 的一个特性吗?

我读了很多的问题和答案像这个这个

我知道通配符在运行命令之前被 shell 扩展,它们是 shell 的一个特性。通配符也适用于那些可以接受许多参数的命令。在find . -name *.rb 我们若在当前目录多个文件find会给我们一个错误,因为发现不能接受多个参数,解决这个是方法:

find . -name "*.rb"
find . -name '*.rb'
find . -name \*.rb
Run Code Online (Sandbox Code Playgroud)

我们避开星号并防止 shell 扩展,但通配符是 shell 的一个特性;当我们转义 asterisk shell 不知道它的含义时,它应该找到一个名为 的文件*.rb,那么在这种情况下星号是如何扩展的?

bash find wildcards

12
推荐指数
1
解决办法
2061
查看次数

使用 xargs 删除名称中带有空格的文件夹

为什么 xargs 不能删除名称中带有空格的目录,以及如何解决这个问题?

76 find . -type d |xargs  rm -rf
 77 rm -rf fire\ hydrant/
 78 rm -rf wine\ glass/
 79 rm -rf tennis\ racket/
 80 rm -rf traffic\ light/
 81 rm -rf parking\ meter/
 82 rm -rf teddy\ bear/
 83 rm -rf sports\ ball/
 84 rm -rf cell\ phone/
 85 rm -rf stop\ sign/
 86 rm -rf dining\ table/
 87 rm -rf potted\ plant/
Run Code Online (Sandbox Code Playgroud)

command-line find xargs

12
推荐指数
2
解决办法
2150
查看次数

apt-cacher 会改变包访问时间吗?

我尝试使用以下命令从apt-cacher存档中删除长时间未使用的包find

$ find /var/cache/apt-cacher -atime +5 -type f -name ".*deb*" | wc -l 8471
$ find /var/cache/apt-cacher -atime +9 -type f -name ".*deb*" | wc -l 2269
$ find /var/cache/apt-cacher -atime +10 -type f -name ".*deb*" | wc -l 0
Run Code Online (Sandbox Code Playgroud)

我可以依赖 apt-cacher 存档使用的“访问时间”吗?

也就是说,只有当用户收到包裹时,“访问时间”才会改变?

我们使用 apt-cacher 已超过 6 个月。

apt proxy find 12.04 apt-cacher

11
推荐指数
2
解决办法
216
查看次数

如何列出文件名中包含“2015”的一天以上的文件?

我想列出所有不属于今天的日志文件,只2015列出名称中包含的文件。

这些是我尝试过的命令:

find . -name 2015 -mtime +1 -exec  ls -ltrh  {} \;
Run Code Online (Sandbox Code Playgroud)
find . -name *2015* -mtime +1 -exec  ls -ltrh  {} \;
Run Code Online (Sandbox Code Playgroud)

两者的输出都没有,但文件仍然存在。这些命令有问题,我没有得到什么。任何帮助,将不胜感激。

command-line find

11
推荐指数
1
解决办法
4万
查看次数

如何组合多个`find`命令的输出?

find -type f -name "*.avi" -exec md5sum {} + > checklist.chk
find -type f -name "*.mp4" -exec md5sum {} + > checklist.chk
Run Code Online (Sandbox Code Playgroud)

如何结合这两个命令?

  1. 通过在一个命令中组合两个搜索词或

  2. 这样每个命令都将其输出添加到同一个文件中。

希望很清楚我要做什么。

command-line find

11
推荐指数
2
解决办法
3010
查看次数

计算每天文件夹中的文件数

我可以找到文件夹中所有文件的数量,但我得到了相当多的数量。

find . -type f | wc -l      #find number of files in DIR
ls -lrt                     #list all files order by date  
Run Code Online (Sandbox Code Playgroud)

如何找到标准日的文件数?

所以,结果应该是这样的:

# left number is number of files and right is one day.

109294 2016-06-27
101555 2016-06-26
88123  2016-06-25 
... etc. 
Run Code Online (Sandbox Code Playgroud)

command-line find

11
推荐指数
1
解决办法
2万
查看次数

如果特定子目录为空,则删除父目录(非空)

我必须将包含文件的所有目录保留在特定子目录中,但要删除其余所有子目录为空的目录。

更具体地说,这里是结构:

A
|
|--------312311
|       |
|       |----Recording
|       |----a.txt
|       |----b.txt
|
|
|--------453453
|       |----Recording
|                   |
|                   |-------a.mp3
|       |----a.txt
|       |----b.txt
|
|
|--------566532
|       |----Recording
|       |----a.txt
|       |----b.txt
Run Code Online (Sandbox Code Playgroud)

子目录可能包含也可能不包含文件。所以我需要删除整个目录,比如“312311”和“566532”,只有“453453”应该保留所有数据,因为它在“Recording”文件夹中有一个文件,这是我的特定目录。

我看到了很多帖子,但它链接到许多特定的文件名。任何帮助将不胜感激,因为我需要在一周内做很多次。

command-line directory find

11
推荐指数
2
解决办法
2042
查看次数

标签 统计

find ×10

command-line ×6

wildcards ×2

12.04 ×1

apt ×1

apt-cacher ×1

bash ×1

console ×1

directory ×1

proxy ×1

scripts ×1

vim ×1

xargs ×1