小编Mar*_*tus的帖子

使用 diff -r 递归比较两个目录而不在断开的链接上输出

我正在使用diff -r a b递归比较目录ab。尽管存在一些断开的链接(ab目录中的相同断开链接并指向相同的、不存在的目标),但经常会发生这种情况。

diff然后为这些情况输出错误消息并以非零退出代码退出,但是我希望它保持沉默,并以 0 退出,因为目录在我的书中是相同的。

我怎样才能做到这一点?

diff

54
推荐指数
3
解决办法
14万
查看次数

登录/非登录和交互式/非交互式 shell

登录/非登录 shell 的概念与非交互式/交互式 shell 的概念(分别)相同吗?

或者概念正交产生四种不同的组合?

我想获得其清晰的画面.bashrc.bash_profile脚本获得各种情况下采购的,我发现,文章有时可以互换使用这些概念。

shell bash

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

bash - 我可以做:find .... -exec this && that?

有没有办法在逻辑上组合使用find-exec调用的两个 shell 命令?

例如,打印出所有包含字符串 foo 及其出现的.csv文件,我想这样做:

find . -iname \*.csv -exec grep foo {} && echo {} \;
Run Code Online (Sandbox Code Playgroud)

但是bash抱怨“缺少'-exec'的参数”

bash find

28
推荐指数
2
解决办法
2万
查看次数

如果命令失败,不要停止 make'ing,但检查退出状态

我试图指示 GNU Make 3.81 在命令失败时不要停止(所以我在命令前加上-),但我还想检查下一个命令的退出状态并打印一条信息更丰富的消息。但是我下面的 Makefile 失败了:

$ cat Makefile 
all:
    -/bin/false
    ([ $$? -eq 0 ] && echo "success!") || echo "failure!"
$
$ make
/bin/false
make: [all] Error 1 (ignored)
([ $? -eq 0 ] && echo "success!") || echo "failure!"
success!
Run Code Online (Sandbox Code Playgroud)

为什么上面的 Makefile 回显“成功!” 而不是“失败!” ?

更新:

遵循并扩展已接受的答案,以下是它的书写方式:

failure:                                                                                                                                                                                                                                      
    @-/bin/false && ([ $$? -eq 0 ] && echo "success!") || echo "failure!"                                                                                                                                                                 
success:                                                                                                                                                                                                                                      
    @-/bin/true && ([ $$? -eq 0 ] && echo "success!") || echo …
Run Code Online (Sandbox Code Playgroud)

make gnu-make

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

使用 -execdir 查找

当我运行时find-execdir我没有得到我期望的结果。

例如:

mkdir -p a/b/c
find . -type d -execdir touch foo \;
$ tree a
a
??? b
?   ??? c
?   ??? foo
??? foo
Run Code Online (Sandbox Code Playgroud)

目录c不包含foo文件。如何find在每个目录中访问并在本地执行某些操作?

shell directory find directory-structure files

18
推荐指数
3
解决办法
4万
查看次数

diff -r 仅适用于某些文件类型

有没有一种方法可以执行两个目录的递归差异,但只比较(在它们各自的位置)与特定文件名或文件类型谓词匹配的文件?

例如,我想这样做的东西

diff -r dir-a dir-b -filenames *.java, ivy.xml, build.xml
Run Code Online (Sandbox Code Playgroud)

......甚至更好:

diff -r dir-a dir-b -filetype text
Run Code Online (Sandbox Code Playgroud)

显然,它不是强制性的,diff因为我认为它是一个咒语,find-exec diff可能会起作用(我只是不知道如何在后一种情况下生成补充文件路径)。

command-line diff find

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

如果 -exec 失败,则中断查找

有没有办法编写一个,find以便-exec在文件中的一个操作失败时它会中断?

例如 (javac可以方便地用作可以在某些文件上返回退出代码 1 而没有其他原因的程序):

$ echo "public classXX A{}" >> A.java
$ echo "public class B{}" >> B.java
$ find . -iname \*.java -exec javac {} \;
./A.java:1: error: class, interface, or enum expected
public classXX A{}
       ^
1 error
Run Code Online (Sandbox Code Playgroud)

在上面的示例中,虽然exec文件上的A.java失败(并返回退出代码 1),但find命令继续执行并编译文件B.java。有没有办法摆脱find或者我应该使用某种形式的for代替?

我的查找版本:

$ find -version  | head -1
find (GNU findutils) 4.4.2
Run Code Online (Sandbox Code Playgroud)

find

15
推荐指数
2
解决办法
3121
查看次数

获取目录的大致大小(递归地包括所有文件和子目录)

有没有办法快速获得目录的准确大小(递归地包括其所有子目录)?我不想要子目录的大小,我只是说它们应该递归地包含在报告的总大小中。

如果没有,有办法获得近似尺寸吗?我正在考虑类似的事情,df这会为整个文件系统产生快速响应,但这次是针对特定目录(及其子目录)。

du当给定目录包含数千个子目录时,使用解决方案似乎需要很长时间。

bash

11
推荐指数
2
解决办法
2万
查看次数

轮换日志文件的解决方案

我正在运行一个守护进程,它必须无限期地运行(可以说是“服务”)并希望记录其输出。一个简单的解决方案,如:

./long-running-process > log.out &
Run Code Online (Sandbox Code Playgroud)

...作为文件失败log.out

  • 一旦超过大小,我可以很容易地像一个文本编辑器处理emacsvi
  • 存在耗尽可用文件系统空间的风险。

为了保持日志文件的大小可管理,我可以使用splitbash 命令:

./long-running-process | split -l 30000
Run Code Online (Sandbox Code Playgroud)

此解决方案使它创建的日志文件的大小保持在可管理的范围内,但是它可能会用完后缀 ( split: output file suffixes exhausted),或者,如果后缀空间很大,它也可能会耗尽文件系统空间。

因此,我正在寻找一种解决方案,该解决方案将生成许多日志文件,每个日志文件的大小都可以管理,并且还将在它们之间轮换,以便对总磁盘空间进行声明。

是否有这样的解决方案可用,或者我必须在应用程序级别实现它吗?

logs logrotate

10
推荐指数
3
解决办法
2万
查看次数

查找目录树中的所有绝对链接

我如何(递归地)检测目录中以绝对方式而不是相对方式标识其目标的所有符号链接?

由于在移动整个目录树时这些链接很可能会中断,因此我希望有一种识别它们的方法。

如果移动目录树(如果它们碰巧指向目录树的根目录之外),即使是相对链接也可能会中断,但我认为这个问题已解决。

symlink

10
推荐指数
2
解决办法
1352
查看次数