我想在当前目录中找到包含文本“chrome”的文件。
$ find . -exec grep chrome
find: missing argument to `-exec'
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
我有一个文件夹,里面有一些目录和一些文件(有些是隐藏的,以点开头)。
for d in *; do
echo $d
done
Run Code Online (Sandbox Code Playgroud)
将遍历所有文件和目录,但我只想遍历目录。我怎么做?
这个问题的灵感来自
我看到这些结构
for file in `find . -type f -name ...`; do smth with ${file}; done
Run Code Online (Sandbox Code Playgroud)
和
for dir in $(find . -type d -name ...); do smth with ${dir}; done
Run Code Online (Sandbox Code Playgroud)
几乎每天都在这里使用,即使有些人花时间对这些帖子发表评论,解释为什么应该避免这种东西......
看到此类帖子的数量(以及有时这些评论被简单地忽略的事实)我想我还不如问一个问题:
为什么循环find的输出是不好的做法,为 返回的每个文件名/路径运行一个或多个命令的正确方法是find什么?
有没有办法让 sed 在每次更换之前要求我确认?在 vim 中使用 replace 时类似于 'c' 的东西。
sed 会这样做吗?
我正在尝试将findtoecho 0用于某些文件,但显然这仅适用于sh -c:
find /proc/sys/net/ipv6 -name accept_ra -exec sh -c 'echo 0 > {}' \;
Run Code Online (Sandbox Code Playgroud)
但是使用sh -cwithfind -exec让我觉得很不安,因为我怀疑引用问题。我稍微摆弄了一下,显然我的怀疑是有道理的:
我的测试设置:
martin@dogmeat ~ % cd findtest
martin@dogmeat ~/findtest % echo one > file\ with\ spaces
martin@dogmeat ~/findtest % echo two > file\ with\ \'single\ quotes\'
martin@dogmeat ~/findtest % echo three > file\ with\ \"double\ quotes\"
martin@dogmeat ~/findtest % ll
insgesamt 12K
-rw-rw-r-- 1 martin martin 6 Sep 17 12:01 file with "double …Run Code Online (Sandbox Code Playgroud)我尝试查找*.e*与另一个文件 ( md.tpr)位于同一目录中的一些文件 ( )。我需要使用以下内容列出它们(用于进一步处理):
find . -name md.tpr -execdir ls *.e* \;
Run Code Online (Sandbox Code Playgroud)
我尝试了此命令的一些变体和其他一些变体(包括单引号传递给的命令-execdir或将其作为sh -c 'ls *.e*'或eval 'ls *.e*'仅举几例)。似乎通配符在传递给-exec或时不起作用-execdir。运行上述命令时出现的错误是:
ls: *.e*: No such file or directory
Run Code Online (Sandbox Code Playgroud)
就像一个健全性检查一样,我做-execdir pwd了它并打印了它应该打印的内容,所以看起来它是 globbing 的问题,因为这些*.e*文件确实存在于这个测试列出的目录中。
现在,我能够以一种不太优雅的方式解决这个问题,但它让我感到困惑,为什么通配符和通配符在这里不起作用。有任何想法吗?还是我完全偏离了轨道?
我使用 bash 3.2.25(旧的,但我在该系统上没有管理员权限)。
另外,有趣的是,如果我这样做
find ~ -name .bashrc -maxdepth 2 -execdir ls -d .b* \;
Run Code Online (Sandbox Code Playgroud)
除非从$HOME.
我知道我可以使用find:找到文件find . -type f -name 'sunrise'。结果示例:
./sunrise
./events/sunrise
./astronomy/sunrise
./schedule/sunrise
Run Code Online (Sandbox Code Playgroud)
我也知道我可以确定文件的文件类型:file sunrise. 结果示例:
sunrise: PEM RSA private key
Run Code Online (Sandbox Code Playgroud)
但是如何按文件类型查找文件?
例如my-find . -type f -name 'sunrise' -filetype=bash-script:
./astronomy/sunrise
./schedule/sunrise
Run Code Online (Sandbox Code Playgroud) 我有成千上万个类似这样命名的 unl 文件cbs_cdr_vou_20180624_603_126_239457.unl。我想使用以下命令打印这些文件中的所有行。但它只给我文件名。我不需要文件名,我只需要这些文件中的内容。
find -type f -name 'cbs_cdr_vou_20180615*.unl' > /home/fifa/cbs/test.txt
Run Code Online (Sandbox Code Playgroud)
电流输出:
./cbs_cdr_vou_20180615_603_129_152023.unl
./cbs_cdr_vou_20180615_603_128_219001.unl
./cbs_cdr_vou_20180615_602_113_215712.unl
./cbs_cdr_vou_20180615_602_120_160466.unl
./cbs_cdr_vou_20180615_603_125_174428.unl
./cbs_cdr_vou_20180615_601_101_152369.unl
./cbs_cdr_vou_20180615_603_133_193306.unl
Run Code Online (Sandbox Code Playgroud)
预期输出:
8801865252020|200200|20180613100325|;
8801837463298|200200|20180613111209|;
8801845136955|200200|20180613133708|;
8801845205889|200200|20180613141140|;
8801837612072|200200|20180613141525|;
8801877103875|200200|20180613183008|;
8801877167964|200200|20180613191607|;
8801845437651|200200|20180613200415|;
8801845437651|200200|20180613221625|;
8801839460670|200200|20180613235936|;
Run Code Online (Sandbox Code Playgroud)
请注意,对于 cat 命令,我收到错误-bash: /bin/logger: Argument list too long,这就是为什么要使用find而不是cat命令的原因。
在目录中,/home/username/data我有文件和目录。这些文件名中的一些以.txt(我将其称为文本文件)结尾,其他的则没有。在子目录中也会发生同样的情况。
调用子目录之一other_files(其完整路径为/home/username/data/other_files/)。
我想移动所有不以to.txt 的根 结尾的文件。/home/username/dataother_files
我可以用循环来做,但这不是我想要的。我想使用命令和管道。我相信这很容易,只是我没有看到。mv, find,grep和 的组合xargs应该这样做,我只是不确定如何。
所以我一直在尝试匹配文本文件(然后想办法匹配除它们之外的所有内容)。在下面,假设我当前的目录是/home/username/data.
首先我选择了find . | grep -E "*\.txt",但这匹配所有文本文件,包括子目录中的文件。
所以我find . | grep -E "\./*\.txt"只是想看看我是否会得到相同的比赛然后朝着我的目标努力,但这并不匹配任何东西,这就是我被卡住的地方。
我该如何去做我在问题开头所描述的事情?
当我运行此命令时,它可以工作:
$ find . -inum 888696 -exec ls '{}' \;
Conversation.pst Outlook Data File Outlook Data File.sbd Trash Unsent Messages
Inbox.pst Outlook Data File.msf Sent.pst Trash.msf Unsent Messages.msf
Run Code Online (Sandbox Code Playgroud)
然而,当更换ls与cd它不工作:
$ find . -inum 888696 -exec cd '{}' \;
find: ‘cd’: No such file or directory
Run Code Online (Sandbox Code Playgroud)
我知道cd是一个bash内置的,所以我想这里面确实没有任何工作:
$ find . -inum 888696 -exec builtin cd '{}' \;
find: ‘builtin’: No such file or directory
Run Code Online (Sandbox Code Playgroud)
如何cd与find -exec …