Bash

如何在一行中執行多個查找命令?

  • June 10, 2020

我有以下查找命令。我將使用 python 呼叫這些命令並執行它們。我需要一次性執行這些命令。

查找命令

find /path/to/files/ -type f -mtime +3 -exec rm -f {} \;
find /path/to/files2 -type f -mtime +6 -exec rm -f {} \;

當我像這樣在 bash 中執行它們時,我得到一個錯誤find: paths must before expression: `find’

find /path/to/files/ -type f -mtime +3 -exec rm -f {} \; find /path/to/files2 -type f -mtime +6 -exec rm -f {} \;

但是當我像這樣執行它時,我沒有收到錯誤。

find /path/to/files/ -type f -mtime +3 -exec rm -f {} \; && find /path/to/files2 -type f -mtime +6 -exec rm -f {} \;

我想了解為什麼我沒有收到錯誤&&。什麼是執行連續find命令的最佳方式。

對我來說,我應該像下面那樣執行它們。我希望知道一個可以完成以下任務的解決方案,但我也願意接受建議。

cmd1 = 'find ... \; '
cmd2 = 'find ... \; '
cmd3 = 'find ... \; '

# This utilises string concatenation
full_cmd = cmd1 + cmd2 + cmd3

# I need to run them in one call.
# It's hard (not impossible) to change this since it is a part of a bigger code base
python_func_which_runs_bash(full_cmd)

帶有 的&&命令會連續執行命令,但是第二個命令僅在第一個命令成功退出時執行。如果您希望第二個命令無條件執行,您可以使用;代替。&&

請注意,轉義 \;不計算在內 - 它被精確轉義,因此 shell不會將其視為連詞,而是將其作為普通參數傳遞給find.

也可以看看:

引用自:https://unix.stackexchange.com/questions/592078