我很难找到在当前目录及其子目录中查找匹配项.
当我运行find *test.c它时,只给我当前目录中的匹配项.(不查看子目录)
如果我尝试find . -name *test.c我会期望相同的结果,但它只给我在子目录中的匹配.当有工作目录中应该匹配的文件时,它会给我:find: paths must precede expression: mytest.c
这个错误是什么意思,我如何从当前目录及其子目录获取匹配?
我在python中有以下字典:
d = {'1': 'one', '3': 'three', '2': 'two', '5': 'five', '4': 'four'}
Run Code Online (Sandbox Code Playgroud)
我需要一种方法来查找此词典中是否存在诸如"一个"或"两个"的值.
例如,如果我想知道索引"1"是否存在,我只需要键入:
"1" in d
Run Code Online (Sandbox Code Playgroud)
然后python会告诉我这是真还是假,但我需要做同样的事情,除了找到一个值是否存在.
我经常使用该find命令搜索源代码,删除文件等等.令人讨厌的是,因为Subversion在其.svn/text-base/目录中存储了每个文件的重复项,所以我的简单搜索最终会得到大量重复的结果.例如,我想以递归方式搜索uint多个messages.h和messages.cpp文件:
# find -name 'messages.*' -exec grep -Iw uint {} +
./messages.cpp: Log::verbose << "Discarding out of date message: id " << uint(olderMessage.id)
./messages.cpp: Log::verbose << "Added to send queue: " << *message << ": id " << uint(preparedMessage->id)
./messages.cpp: Log::error << "Received message with invalid SHA-1 hash: id " << uint(incomingMessage.id)
./messages.cpp: Log::verbose << "Received " << *message << ": id " << uint(incomingMessage.id)
./messages.cpp: Log::verbose << "Sent message: …Run Code Online (Sandbox Code Playgroud) 我正在尝试在我的网站的目录树中找到所有符号链接.我知道我可以find用来做这个,但我无法弄清楚如何递归检查目录.
我试过这个命令:
find /var/www/ -type l
Run Code Online (Sandbox Code Playgroud)
...后来我发现里面的内容/var/www是符号链接,所以我把命令改为:
find -L /var/www/ -type l
Run Code Online (Sandbox Code Playgroud)
运行需要一段时间,但是我没有匹配.
如何检查子目录?
你如何grep只返回匹配的行?即结果中省略了路径/文件名.
在这种情况下,我想查看当前目录中的所有.bar文件,搜索术语FOO
find . -name '*.bar' -exec grep -Hn FOO {} \;
Run Code Online (Sandbox Code Playgroud) 我不太明白"男人发现"给出的例子,有人能给我一些例子和解释吗?我可以在其中组合正则表达式吗?
更详细的问题是这样的:写一个shell脚本,changeall,它有一个像"changeall [-r | -R]"string1""string2"这样的接口.它将找到后缀为.h,.C的所有文件,.cc或.cpp并将所有出现的"string1"更改为"string2".- r是仅保留当前目录或包含subdir的选项.注意:1)对于非递归情况,不允许"ls" ,我们只能使用'find'和'sed'.2)我试过'find -depth'但它不受支持.这就是为什么我想知道'-prune'是否可以帮助,但是不明白'男人发现'.
EDIT2:我正在做作业,我没有详细提问,因为我想自己完成.既然我已经完成并把它交给我,现在我可以陈述整个问题.此外,我设法在不使用-prune的情况下完成了作业,但无论如何都想学习它.
我有两个大文件(文件名集).每个文件大约有30,000行.我试图找到一种快速查找file1中不存在于file2中的行的方法.
例如,如果这是file1:
line1
line2
line3
Run Code Online (Sandbox Code Playgroud)
这是file2:
line1
line4
line5
Run Code Online (Sandbox Code Playgroud)
然后我的结果/输出应该是:
line2
line3
Run Code Online (Sandbox Code Playgroud)
这有效:
grep -v -f file2 file1
但是在我的大文件上使用它时非常非常慢.
我怀疑有一个很好的方法来使用diff(),但输出应该只是行,没有别的,我似乎无法找到一个开关.
任何人都可以帮我找到一个快速的方法,使用bash和基本的Linux二进制文件?
编辑:为了跟进我自己的问题,这是我到目前为止使用diff()找到的最好方法:
diff file2 file1 | grep '^>' | sed 's/^>\ //'
Run Code Online (Sandbox Code Playgroud)
当然,必须有更好的方法吗?
今天我用一个命令得到了帮助,但它似乎没有起作用.这是命令:
find /home/me/download/ -type f -name "*.rm" -exec ffmpeg -i {} -sameq {}.mp3 && rm {}\;
Run Code Online (Sandbox Code Playgroud)
shell返回
find: missing argument to `-exec'
Run Code Online (Sandbox Code Playgroud)
我基本上要做的是递归遍历一个目录(如果它有其他目录)并对.rm文件类型运行ffmpeg命令并将它们转换为.mp3文件类型.完成此操作后,删除.rm刚刚转换的文件.
我很感激任何帮助.
是否有一种简单的方法来递归查找目录层次结构中的所有文件,这些文件不以扩展列表结尾?例如,所有不是*.dll或*.exe的文件
UNIX/GNU查找,功能强大,似乎没有exclude模式(或者我错过了它),而且我总是发现很难使用正则表达式来查找与特定表达式不匹配的内容.
我在Windows环境中(使用大多数GNU工具的GnuWin32端口),所以我同样对Windows解决方案开放.
我正在做一个find然后获取文件列表.如何将其传输到另一个实用程序cat(以便cat显示所有这些文件的内容),并且基本上需要grep从这些文件中获取内容.