我想用来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) 我有一个文件,/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) 我运行这个命令:
~/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?
我知道通配符在运行命令之前被 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,那么在这种情况下星号是如何扩展的?
为什么 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) 我尝试使用以下命令从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 个月。
我想列出所有不属于今天的日志文件,只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)
两者的输出都没有,但文件仍然存在。这些命令有问题,我没有得到什么。任何帮助,将不胜感激。
find -type f -name "*.avi" -exec md5sum {} + > checklist.chk
find -type f -name "*.mp4" -exec md5sum {} + > checklist.chk
Run Code Online (Sandbox Code Playgroud)
如何结合这两个命令?
通过在一个命令中组合两个搜索词或
这样每个命令都将其输出添加到同一个文件中。
希望很清楚我要做什么。
我可以找到文件夹中所有文件的数量,但我得到了相当多的数量。
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) 我必须将包含文件的所有目录保留在特定子目录中,但要删除其余所有子目录为空的目录。
更具体地说,这里是结构:
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”文件夹中有一个文件,这是我的特定目录。
我看到了很多帖子,但它链接到许多特定的文件名。任何帮助将不胜感激,因为我需要在一周内做很多次。