标签: find

查找:未知谓词

这可能不是一个 Ubuntu 问题,而是一个 Linux 问题,仍然希望那里的一些 Linux 用户可以帮助我理解这一点。

我正在尝试使用find命令在目录树中查找一些文件。

不幸的是某些文件被命名为开始于一个横杠,像-000.jpg-002.jpg00n.jpg等等。但是,每次命令定位以这种方式命名的文件之一时,它只会中断进程并以以下方式抱怨:

find: unknown predicate `-001.jpg'
Run Code Online (Sandbox Code Playgroud)

或任何以破折号开头的文件的名称。

在我看来,find命令以某种方式将生成的文件名解释为参数,但我还没有找到规避这种行为的方法。

提前感谢您分享您的智慧。

bash find

7
推荐指数
1
解决办法
3万
查看次数

如何使用 find 按名称排除目录?

我的系统上有很多目录,结构如下:

\-----data
       \------- 001abc
       \------- 002abc
       \------- 003abc
       \------- 004abc
       \------- 005abc
       \ ....
Run Code Online (Sandbox Code Playgroud)

当我想找到某个目录时,我只需输入,find . -iname "002abc*"但如何找到排除某些名称匹配的目录?

在 MySQL 中是这样的 select * from folder where filename != '0021bc'

bash find

7
推荐指数
1
解决办法
8214
查看次数

如何将 find 命令与其他命令结合使用,这样我就不必导航到文件夹?

有时我想运行某些文件,但我不想一直导航到文件夹。

如果我知道文件名并且find -name file_name.py只返回一个结果,我可以使用它吗?

例如,不是一直导航到特定文件夹并调用:

python file_name.py
Run Code Online (Sandbox Code Playgroud)

我可以写:

python [ find -name file_name.py ] 
Run Code Online (Sandbox Code Playgroud)

或者

python [ locate file_name.py ]
Run Code Online (Sandbox Code Playgroud)

或者某种“在我的整个计算机中搜索此文件名并使用它”的变体?最好在一行。

python command-line find locate

7
推荐指数
2
解决办法
747
查看次数

为什么定位比查找快?

我正在我的源中寻找一个文件,并尝试了定位和查找。出人意料的是,locate 是在整个机器中搜索,而且比 find 更快,后者只在当前目录和子目录中搜索。

这是我对两者的 shell 命令:

find . -name vendorsetup.sh # takes 50 seconds to search all files in curren -sub directories.

locate vendorsetup.sh # takes 20 seconds to search file in whole machine.
Run Code Online (Sandbox Code Playgroud)

为什么这个?

find locate

7
推荐指数
1
解决办法
2021
查看次数

如何删除包含 n 个或更少文件的文件夹?

我需要进行一些文件夹清理,并且我想删除其中包含 10 个或更少文件的目录。我尝试查看 GNU 的find,但与目录中的文件数量无关。我应该使用什么命令来完成它?

delete files directory find

7
推荐指数
2
解决办法
321
查看次数

通过匹配路径查找文件

我有一个包含许多子目录的目录。这些子目录中的每一个都包含一个子目录,它们都具有相同的名称。我想在命令行上生成所有这些文件的列表。因此,例如,如果我有:

dir1/
    file1.txt
    subdir/
        relevant_file1.c
        relevant_file2.c
dir2/
    file2.txt
    subdir/
        relevant_file3.txt
        relevant_file4.java
dir3/
    subdir/
        relevant_file5.cpp
    irrelevant_subdir/
        unimportant_file.txt
dir4/
    subdir/
Run Code Online (Sandbox Code Playgroud)

我想要以下输出:

dir1/subdir/relevant_file1.c
dir1/subdir/relevant_file2.c
dir2/subdir/relevant_file3.txt
dir2/subdir/relevant_file4.java
dir3/subdir/relevant_file5.cpp
Run Code Online (Sandbox Code Playgroud)

我认为使用应该不会太难find,但我不太能弄明白。这个问题很难搜索,因为它太具体了,仅仅搜索“通过匹配路径查找文件”不会产生任何有用的东西。

command-line bash directory find

7
推荐指数
2
解决办法
514
查看次数

find 与 -exec 和 xargs 有什么区别?

尝试学习 Bash 脚本我想对当前目录下满足特定条件的所有文件执行一些命令。使用

find -name *.flac
Run Code Online (Sandbox Code Playgroud)

具体来说,我想转换.flac.mp3. 我可以找到所有文件。但是,我没有看到使用-execforfind和 using选项执行命令的区别xargs。例如

find -name *.flac | xargs -i ffmpeg -i {} {}.mp3
Run Code Online (Sandbox Code Playgroud)

相比

find -name *.flac -exec ffmpeg -i {} {}.mp3 \;
Run Code Online (Sandbox Code Playgroud)

有人可以指出区别吗?什么是更好的实践?有什么优点/缺点?

另外:如果我想同时删除原始文件,我将如何在上面的代码中添加第二个命令?

command-line find xargs

7
推荐指数
1
解决办法
2897
查看次数

如何将所有 java 源文件移动到它们各自的包目录?

我是 linux 新手,对 linux 命令知之甚少。

我的情况是,我在一个目录中有很多具有不同包名的 java 源文件。

我想将所有这些 java 源文件移动到它们各自的包目录中。

在任何java源文件中,第一行是package语句,前面可能有也可能没有注释。

所以我想要的是编写一个 shell 脚本来解析当前目录中所有 .java 文件的包行,然后将该 java 文件移动到其各自的包目录中。

现在的情况:

directory1
|- Class1.java (package : com.pkgA)
|- Class2.java (package : com.pkgB)
|- Class3.java (package : com.pkgC.subpkg)
Run Code Online (Sandbox Code Playgroud)

我想要的是:

directory1
|- src
   |- com
      |- pkgA
         |- Class1.java
      |- pkgB
         |- Class2.java
      |- pkgC
         |- subpkg
            |- Class3.java
Run Code Online (Sandbox Code Playgroud)

示例源文件:

//This is single line comment
/* This is multi line comment
 * Any of these style comment may or may not be present …
Run Code Online (Sandbox Code Playgroud)

command-line bash files java find

7
推荐指数
1
解决办法
1325
查看次数

根据分辨率在 Linux 目录中查找图像

我想扫描目录中的所有图像(在子文件夹中递归),并找到分辨率高于特定阈值的图像(例如,分辨率至少800x600或更容易,宽度高于1000像素)。然后我想将他们的地址记录在一个文本文件中,伴随着他们的解析(或[width], [height]为了更好的格式)。

所以log.txt看起来像这样:

/home/users/myuser/test/image1.jpg, 1800, 1600
/home/users/myuser/test/image20.jpg, 2800, 2600
/home/users/myuser/test/image30.jpg, 1500, 1200
Run Code Online (Sandbox Code Playgroud)

我怎样才能使用 bash 脚本做到这一点?我必须扫描数百万张图像。

command-line bash search find image-processing

7
推荐指数
1
解决办法
9398
查看次数

如何按名称递归查找目录并删除其内容(包括所有子目录和文件),同时保留目录本身?

鉴于

  1. 我有一个包含EmptyMe不同级别文件夹的树状结构
  2. EmptyMe 目录包含子目录和文件

要求

  1. 清空目录的内容EmptyMe包括它们的子目录),同时保留这些目录(不删除它们)。

问题

EmptyMe从当前级别递归查找所有目录并删除其所有内容(包括子目录),同时将EmptyMe目录保留在光盘上的 Unix 命令是什么?

我的尝试

$ find . -name 'EmptyMe' -type d -exec rm -- {} +
rm: cannot remove `./a/b/c/d/EmptyMe': Is a directory
Run Code Online (Sandbox Code Playgroud)

如您所见,该命令试图删除EmptyMe,而不是其内容。

command-line rm find

7
推荐指数
1
解决办法
6696
查看次数

标签 统计

find ×10

command-line ×6

bash ×5

directory ×2

files ×2

locate ×2

delete ×1

image-processing ×1

java ×1

python ×1

rm ×1

search ×1

xargs ×1