我想wc -l
在算术扩展中运行并使用结果。换句话说,我想做这样的事情:
wc -l (now somehow pipe/pass the result of this to) $((2 + result of wc command))
我怎样才能做到这一点?
语境
在我的~/Pictures
目录中,我有多个名为“ Screenshot from YYYY-MM-DD hh-mm-ss.png
”的文件以及其他文件。我想保留所有不是屏幕截图的文件,并且只保留指定数量的屏幕截图图片,具体取决于它们的最近时间。我想基本上只保留我最近的 3 个屏幕截图,并删除所有其余的。
所以这是我到目前为止所拥有的:
ls | grep "Screenshot *" | sort -r | wc -l
然后我想做的是从 中减去 3 wc -l
,然后我可以使用它tail
来列出所有不是前 3 个的文件,然后删除它们。
对于您要问的内容(来源):
bash -c 'commands'
运行一个新的 bash 环境,其中$1
是xargs
. 用于man the_commmand
访问手册页并了解有关每个命令及其选项的更多信息。来自
man bash
:因此,在这种情况下,您可以避免使用占位符
args
(注意您可以使用任何单词)而只使用 $0。此外,wc -l
你可以避免-n 1
:对于您需要的内容,可能更适合以交互方式删除 (
-i
) 超过 20 天的文件。要获取具有该名称模式的前 3 个最新文件更简单:
假设 FILE 是位于当前目录中的文件:
wc -l < FILE
返回 FILE 中的行数并echo $((`wc -l < FILE` +2))
返回 FILE + 2 中的行数。使用算术表达式形式的算术扩展将字符串转换为数值表达式相对简单。
$((EXPRESSION))
EXPRESSION