Questions tagged «find»

对于与查找有关的问题,请使用命令行实用程序在目录层次结构中搜索文件。使用此标记可解决有关find本身的问题或有关使用find命令行实用程序而引起的问题的问题。


1
如何更改使用find命令找到的多个文件的权限?
我有一个包含大量文件的目录。部分文件具有755权限,另一部分具有644权限。我想将具有755权限的文件转换为644。我已经尝试通过从目录本身运行以下代码行: find . -perm 755 -exec chmod 644 {}\; 但是,结果是,该权限仅更改了目录本身,将其更改回原来的位置后,我发现文件权限保持不变。我想念什么吗?

2
解释find的-path和-prune选项
我有一个最容易理解的简单脚本,不清楚的是find命令。我有很多文档,但并不能使其更加清晰。我的想法是,它的工作方式类似于for循环,当前找到的文件被替换为{},并复制到$ HOME / $ dir_name,但是使用-path和-prune -o进行的搜索如何工作?有如此具体和相关的文档,却仍然不知道发生了什么,这很烦人。 #!/bin/bash # The files will be search on from the user's home # directory and can only be backed up to a directory # within $HOME read -p "Which file types do you want to backup " file_suffix read -p "Which directory do you …
11 find 

5
移动驻留在单个目录中的大量文件的最有效方法是什么?
CentOS 5.x 如果这是一个重复的问题,我深表歉意。我见过很多类似的问题(关于删除文件),但情况并不完全相同。 我有一个包含成千上万个文件的目录(可能超过一百万个),作为对一个不同问题的短期修复,我需要将这些文件移动到另一个位置。 为了讨论的目的,假设这些文件最初位于其中/home/foo/bulk/,我想将它们移至/home/foo2/bulk2/ 如果尝试mv /home/foo/bulk/* /home/foo2/bulk2/ ,会出现“参数过多”错误。 Google先生告诉我,批量删除文件的另一种方法是运行find。就像是: find . -name "*.pdf" -maxdepth 1 -print0 | xargs -0 rm 如果我要删除内容,那很好,但是在这种情况下,我想移动文件...如果我输入类似find . -name "*" -maxdepth 1 -print0 | xargs -0 mv /home/foo2/bulk2/bash的内容,则抱怨该文件不是目录。 在此处将批量文件从一个目录移动到另一个目录的最佳命令是什么?
11 linux  bash  shell  find  rename 

2
如何使用linux find命令打印内容而不是文件名?
我有成千上万个这样的unl文件cbs_cdr_vou_20180624_603_126_239457.unl。我想使用以下命令从这些文件中打印所有行。但它只给我文件名。我不需要文件名,我只需要这些文件中的内容。 find -type f -name 'cbs_cdr_vou_20180615*.unl' > /home/fifa/cbs/test.txt 电流输出: ./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 预期产量: 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|; 请注意,对于cat命令,我会收到错误消息-bash: /bin/logger: Argument list too long,这就是为什么要使用它find而不是catcommand的原因。
10 linux  find  cat 

2
SunOS上linux上的find命令是否有替代方法?
find与findSunOS或Solaris上的命令相比,Linux上的命令具有很多选项。 我想使用这样的find命令: find data/ -type f -name "temp*" -printf "%TY-%Tm-%Td %f\n" | sort -r 它在Linux机器上可以很好地工作,但是在-printfSunOS机器上没有相同的命令。我想以"%TY-%Tm-%Td %f\n"格式自定义输出。 请提出SunOS的其他替代方案。

4
查找命令,枚举输出并允许选择?
当我使用时find,它经常会发现多个结果,例如 find -name pom.xml ./projectA/pom.xml ./projectB/pom.xml ./projectC/pom.xml 我通常只想选择一个特定的结果(例如edit ./projectB/pom.xml)。有没有办法枚举find输出并选择要传递到另一个应用程序的文件?喜欢: find <print line nums?> -name pom.xml 1 ./projectA/pom.xml 2 ./projectB/pom.xml 3 ./projectC/pom.xml !! | <get 2nd entry> | xargs myEditor ? [编辑]通过提到的一些解决方案,我遇到了一些重大错误。因此,我想说明重现步骤: git clone http://git.eclipse.org/gitroot/platform/eclipse.platform.swt.git cd eclipse.platform.swt.git <now try looking for 'pom.xml' and 'feature.xml' files> [编辑]解决方案1 到目前为止,如果我将'nl'(足够的输出),头和尾结合起来使用函数$(!!),头和尾似乎可以正常工作。 即: find -name pom.xml …
10 bash  files  find 


5
找到 xargs shasum(过早)创建校验和文件本身的校验和,并且在检查时失败
我的问题(在带有的脚本中#!/bin/sh)如下:我尝试出于归档目的对目录中的所有文件进行校验和。具有所有文件名的校验和(在我的情况下为sha1)文件应位于同一目录中。假设我们有一个~/test包含文件f1和的目录f2。 mkdir ~/test cd ~/test echo "hello" > f1 echo "world" > f2 现在用 find -maxdepth 1 -type f -printf '%P\n' | xargs shasum 完全符合我的要求,它仅列出当前目录的所有文件并计算sha1和(maxdepth可能在以后更改)。STDOUT上的输出为: f572d396fae9206628714fb2ce00f72e94f2258f f1 9591818c07e900db7e1e0bc4b884c945e6a61b24 f2 不幸的是,当尝试使用 find -maxdepth 1 -type f -printf '%P\n' | xargs shasum > sums.sha1 生成的文件将显示自身的校验和: da39a3ee5e6b4b0d3255bfef95601890afd80709 sums.sha1 f572d396fae9206628714fb2ce00f72e94f2258f f1 9591818c07e900db7e1e0bc4b884c945e6a61b24 f2 并因此在以后失败shasum …
10 find  xargs  checksum  hashsum 

3
查找以数字结尾的文件
我正在尝试制作一些备份脚本,因为日志文件越来越大。我现在正在处理当前文件(例如中的secure文件/var/log/)并从该文件中删除内容。但是有些文件的名称如:secure.1,secure.2我希望对所有这些文件进行计数,如果数量更大,则2可以全部归档。我找不到找到此文件或计数它们的方法。我想到的第一个想法是: find /var/log/ -name *.1 | wc -l 1因为仅有一个文件,它将始终打印secure.1。我怎样才能像在for循环中那样在其中可以指定一定范围内的数字,例如{1..5}或类似数字。有没有一种方法可以分隔此文件,并使它们成为一个文件,然后对其进行备份或删除,或者执行任何操作……或者首先,我如何才能找到所有以数字结尾的数字。

1
如何查找文件名中包含换行符的文件?
我正在尝试查找文件名中包含换行符的文件。但是我不知道该使用哪种模式。 以下工作有效,但如果要在缩进代码中使用它,则不是很有用。 find . -name '* *' 我尝试了这两个,但他们只成功找到了包含字母n的文件名: find . -name '*\n*' find . -name "*\n*" 然后,我发现了如何编写反斜杠转义序列并尝试了此操作: find . -name "*$'\n'*" 但这什么也找不到。我应该如何写模式?
10 shell  find  patterns 

4
如何使查找遵循大多数(但不是全部)符号链接?
我的操作系统和主目录位于SSD上。我将一些大文件存储在硬盘上,并从主目录到硬盘进行符号链接(例如〜/ Videos / Films是/ mnt / hdd / Films的符号链接)。我也有许多Wine前缀,每个都有dosdevices / z:符号链接到/。 因此,如果使用不带-L的find,它将丢失硬盘上的所有内容。但是,如果我将find与-L一起使用,由于Wine与/的符号链接,它最终会陷入循环。 有没有解决这个问题的明智方法,以便在我想要的位置进行搜索?凭直觉,我想要“遵循符号链接,除非它们在名为dosdevices的目录下”之类的东西。“遵循指向硬盘上某些内容的符号链接”也将起作用。
10 find  symlink 


2
查找/ ls缓存
好像我是第一次运行find或ls在目录上运行,需要一段时间。但是,此后每次都非常快,就好像目录的内容列表已在某处缓存或建立索引一样。 有没有办法在计算机重新启动后保留此缓存?
10 find  ls  cache 

2
处理从find命令通过管道传输的文件名
我是Bash的新手,正在尝试做一些表面上看起来很简单的事情-在目录层次结构上运行find以获取所有* .wma文件,将输出管道传输到命令,然后将它们转换为mp3并将转换后的文件另存为.mp3。我的想法是该命令应如下所示(我不再使用音频转换命令,而是使用echo作为示例): $ find ./ -name '*.wma' -type f -print0 | xargs -0 -I f echo ${f%.*}.mp3 据我了解,-print0 arg将允许我处理具有空格的文件名(其中许多文件是音乐文件)。然后,我期待(由于xargs的原因)find中的每个文件路径都在f中捕获,并且使用子字符串match / delete从字符串末尾开始,我应该用mp3回显原始文件路径扩展名而不是wma。但是,我看到的不是这个结果,而是: *.mp3 *.mp3 *.mp3 *.mp3 *.mp3 *.mp3 *.mp3 *.mp3 *.mp3 ... 所以我的问题(除了特定的“我在这里做错了什么”之外)是吗?在字符串操作操作中,是否需要对管道操作结果所产生的值与变量赋值所导致的值进行不同的处理? ?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.