在外壳中,如果大于100MB,如何删除文件,否则移动

-1 unix linux bash shell sh

使用shell命令执行以下操作的最简单方法是什么?

伪代码: rm abc if >100MB else mv abc /tmp

abc可以是一个文件或一个目录的名称。

我想拥有一个别名,如果在文件或目录上运行,则将其删除(如果其大小大于100MB),否则将其移至另一个目录。我知道我可以用全部功能完成类似的工作,但是必须有一个光滑的单面纸可以完成相同的工作。

Aar*_*ron 5

要移动单个常规文件(如果大小小于100MB),否则将其删除,可以使用以下命令:

# 104857600 = 1024 * 1024 * 100 = 100M
[ $(stat --printf '%s' "$file") -gt 104857600 ] && rm "$file" || mv "$file" /tmp/
Run Code Online (Sandbox Code Playgroud)

要移动单个目录及其内容(如果其总大小小于100MB),否则要删除它,可以使用以下命令:

[ $(du -s "$directory" | cut -f1) -gt 104857600  ] && rm -rf "$directory" || mv "$directory" /tmp/
Run Code Online (Sandbox Code Playgroud)

要根据输入参数是指向文件还是指向目录来执行一项或多项操作,请使用[ -d "$path" ] && <directory pipeline> || <file pipeline>(或最好是因为这开始是很多代码,一种标准if [ -d "$path" ]; then <directory pipeline>; else <file pipeline>; fi)。

要根据其大小递归移动或删除目录中的所有文件,可以使用以下命令:

find . -type f -a \( -size +100M -exec rm {} + -o -exec mv -t /tmp/ {} + \)
Run Code Online (Sandbox Code Playgroud)

它首先选择当前目录中的文件,然后rm ...使用大小大于100M的文件列表以及mv ... /tmp其余文件执行。

  • @ennox“它为找到的每个文件为mv命令创建一个fork”,不是,我使用的是`-exec ... +`而不是`-exec ... \;`调用命令时要匹配尽可能多的文件(受最大参数列表大小限制) (2认同)