这可能不是一个 Ubuntu 问题,而是一个 Linux 问题,仍然希望那里的一些 Linux 用户可以帮助我理解这一点。
我正在尝试使用find命令在目录树中查找一些文件。
不幸的是某些文件被命名为开始于一个横杠,像-000.jpg,-002.jpg,00n.jpg等等。但是,每次命令定位以这种方式命名的文件之一时,它只会中断进程并以以下方式抱怨:
find: unknown predicate `-001.jpg'
Run Code Online (Sandbox Code Playgroud)
或任何以破折号开头的文件的名称。
在我看来,find命令以某种方式将生成的文件名解释为参数,但我还没有找到规避这种行为的方法。
提前感谢您分享您的智慧。
我的系统上有很多目录,结构如下:
\-----data
\------- 001abc
\------- 002abc
\------- 003abc
\------- 004abc
\------- 005abc
\ ....
Run Code Online (Sandbox Code Playgroud)
当我想找到某个目录时,我只需输入,find . -iname "002abc*"但如何找到排除某些名称匹配的目录?
在 MySQL 中是这样的 select * from folder where filename != '0021bc'
有时我想运行某些文件,但我不想一直导航到文件夹。
如果我知道文件名并且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)
或者某种“在我的整个计算机中搜索此文件名并使用它”的变体?最好在一行。
我正在我的源中寻找一个文件,并尝试了定位和查找。出人意料的是,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)
为什么这个?
我需要进行一些文件夹清理,并且我想删除其中包含 10 个或更少文件的目录。我尝试查看 GNU 的find,但与目录中的文件数量无关。我应该使用什么命令来完成它?
我有一个包含许多子目录的目录。这些子目录中的每一个都包含一个子目录,它们都具有相同的名称。我想在命令行上生成所有这些文件的列表。因此,例如,如果我有:
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,但我不太能弄明白。这个问题很难搜索,因为它太具体了,仅仅搜索“通过匹配路径查找文件”不会产生任何有用的东西。
尝试学习 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)
有人可以指出区别吗?什么是更好的实践?有什么优点/缺点?
另外:如果我想同时删除原始文件,我将如何在上面的代码中添加第二个命令?
我是 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) 我想扫描目录中的所有图像(在子文件夹中递归),并找到分辨率高于特定阈值的图像(例如,分辨率至少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 脚本做到这一点?我必须扫描数百万张图像。
鉴于:
EmptyMe不同级别文件夹的树状结构EmptyMe 目录包含子目录和文件要求:
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,而不是其内容。