code review!
1.Linux筆記之刪除指定目錄下除最新修改的以 .pack 為擴(kuò)展名的文件之外的所有文件
這段代碼是使用C++語言編寫的,它執(zhí)行了一系列命令來刪除指定目錄下的舊文件。讓我逐行解釋代碼的功能:
-
首先,聲明并初始化了一個(gè)名為
cmd
的std::string
變量,用于存儲(chǔ)要執(zhí)行的命令。命令的內(nèi)容是一個(gè)字符串,它由多個(gè)子命令以管道符(|
)連接而成。std::string cmd = "ls -t "+ pack_path + "/*.pack | tail -n +2 | xargs rm"; ``` - `ls -t`:這個(gè)子命令是用于列出指定目錄下的文件和目錄,并按照修改時(shí)間的倒序排列。 - `pack_path`:這是一個(gè)變量,用于指定目錄的路徑。它將被拼接到命令中的`/*.pack`之前,表示要列出以`.pack`為擴(kuò)展名的文件。 - `/*.pack`:這個(gè)子命令是用于匹配指定目錄下以`.pack`為擴(kuò)展名的文件。 - `tail -n +2`:這個(gè)子命令是用于從輸入中提取第2行及其之后的內(nèi)容。在這里的作用是跳過第一行的文件(即最新修改的文件)。 - `xargs rm`:這個(gè)子命令是用于將前面的輸出作為參數(shù)傳遞給`rm`命令,從而刪除相應(yīng)的文件。
-
接下來,使用
system
函數(shù)執(zhí)行存儲(chǔ)在cmd
變量中的命令。system(cmd.c_str()); ``` ``cmd.c_str()`將`cmd`變量轉(zhuǎn)換為C風(fēng)格的字符串,然后`system`函數(shù)將該字符串作為參數(shù)傳遞給操作系統(tǒng)來執(zhí)行對應(yīng)的命令。
綜上所述,這段代碼的作用是列出指定目錄下以.pack
為擴(kuò)展名的文件,根據(jù)修改時(shí)間的倒序排列,然后刪除除最新修改的文件之外的所有文件。
2.將指定目錄下除最新修改的以 .pack 為擴(kuò)展名的文件之外的所有文件移動(dòng)到另一個(gè)目錄
這段代碼是使用C++語言編寫的,它執(zhí)行了一系列命令來移動(dòng)指定目錄下的舊文件到另一個(gè)目錄。讓我逐行解釋代碼的功能:
-
首先,聲明并初始化了一個(gè)名為
cmd
的std::string
變量,用于存儲(chǔ)要執(zhí)行的命令。命令的內(nèi)容是一個(gè)字符串,它由多個(gè)子命令以管道符(|
)連接而成。std::string cmd = "ls -t "+ pack_path + "/*.pack | tail -n +2 | xargs -I{} mv {} " + new_pack_path; ``` - `ls -t`:這個(gè)子命令是用于列出指定目錄下的文件和目錄,并按照修改時(shí)間的倒序排列。 - `pack_path`:這是一個(gè)變量,用于指定目錄的路徑。它將被拼接到命令中的`/*.pack`之前,表示要列出以 `.pack` 為擴(kuò)展名的文件。 - `/*.pack`:這個(gè)子命令是用于匹配指定目錄下以 `.pack` 為擴(kuò)展名的文件。 - `tail -n +2`:這個(gè)子命令是用于從輸入中提取第2行及其之后的內(nèi)容。在這里的作用是跳過第一行的文件(即最新修改的文件)。 - `xargs -I{}`:這個(gè)子命令是用于將前面的輸出作為參數(shù)傳遞給`mv`命令,并使用`{}`作為占位符,將每個(gè)文件名依次替換到`{}`的位置。 - `mv {}`:這個(gè)子命令是用于移動(dòng)文件,`{}`將被實(shí)際的文件名替換。 - `new_pack_path`:這是一個(gè)變量,用于指定目標(biāo)目錄的路徑。它將被拼接到命令的末尾,表示要將文件移動(dòng)到這個(gè)目錄。
-
接下來,使用
system
函數(shù)執(zhí)行存儲(chǔ)在cmd
變量中的命令。system(cmd.c_str()); ``` ``cmd.c_str()`將`cmd`變量轉(zhuǎn)換為C風(fēng)格的字符串,然后`system`函數(shù)將該字符串作為參數(shù)傳遞給操作系統(tǒng)來執(zhí)行對應(yīng)的命令。
綜上所述,這段代碼的作用是列出指定目錄下以.pack
為擴(kuò)展名的文件,根據(jù)修改時(shí)間的倒序排列,然后將除最新修改的文件之外的所有文件移動(dòng)到另一個(gè)目錄。
3.xargs:用于從標(biāo)準(zhǔn)輸入中讀取數(shù)據(jù),并將其作為參數(shù)傳遞給指定的命令
xargs
是一個(gè)命令行工具,用于從標(biāo)準(zhǔn)輸入中讀取數(shù)據(jù),并將其作為參數(shù)傳遞給指定的命令。它可以將輸入數(shù)據(jù)分割為單個(gè)參數(shù),并將這些參數(shù)傳遞給命令進(jìn)行處理。讓我們詳細(xì)解釋xargs
的用法和功能。
基本語法:
xargs [選項(xiàng)] [命令]
常用選項(xiàng):
-
-I{替換字符串}
:指定一個(gè)占位符,用于替換輸入中的每個(gè)參數(shù)。通常使用{}
作為占位符,可以在命令中多次出現(xiàn)以表示不同的參數(shù)位置。 -
-n 數(shù)字
:指定每次執(zhí)行命令時(shí)傳遞的參數(shù)個(gè)數(shù)。默認(rèn)情況下,xargs
將盡可能多地傳遞參數(shù),但可以使用-n
選項(xiàng)限制每次傳遞的參數(shù)個(gè)數(shù)。 -
-t
:顯示要執(zhí)行的命令,但不實(shí)際執(zhí)行。 -
-p
:在執(zhí)行每個(gè)命令之前提示用戶確認(rèn)。
使用示例:
-
基本用法:將輸入作為命令參數(shù)傳遞。
echo "file1 file2 file3" | xargs rm ``` 上述命令將字符串`file1 file2 file3`通過管道傳遞給`xargs`,然后`xargs`將其作為參數(shù)傳遞給`rm`命令,相當(dāng)于執(zhí)行了`rm file1 file2 file3`。
-
通過
-I
選項(xiàng)替換占位符:echo "file1 file2 file3" | xargs -I{} mv {} dest/ ``` 上述命令將字符串`file1 file2 file3`通過管道傳遞給`xargs`,然后`xargs`使用`-I{}`選項(xiàng)將每個(gè)參數(shù)替換為`{}`占位符,并將其作為參數(shù)傳遞給`mv`命令,相當(dāng)于執(zhí)行了`mv file1 dest/`、`mv file2 dest/`和`mv file3 dest/`。
-
限制每次傳遞的參數(shù)個(gè)數(shù):
echo "file1 file2 file3 file4 file5" | xargs -n 2 rm ``` 上述命令將字符串`file1 file2 file3 file4 file5`通過管道傳遞給`xargs`,然后`xargs`使用`-n 2`選項(xiàng),每次將兩個(gè)參數(shù)傳遞給`rm`命令,相當(dāng)于執(zhí)行了`rm file1 file2`和`rm file3 file4`,最后一個(gè)參數(shù)`file5`單獨(dú)執(zhí)行了一次`rm`命令。
-
從文件中讀取參數(shù):
cat filelist.txt | xargs rm ``` 上述命令將文件`filelist.txt`的內(nèi)容通過管道傳遞給`xargs`,然后`xargs`將每一行作為參數(shù)傳遞給`rm`命令,實(shí)現(xiàn)批量刪除文件的功能。
這些只是xargs
命令的一些常見用法,它還有其他選項(xiàng)和功能可以根據(jù)需要進(jìn)行調(diào)整和使用。請注意,當(dāng)使用xargs
時(shí),請確保輸入的參數(shù)不包含特殊字符或空格,以避免意外行為。
4.xargs和awk區(qū)別
xargs
和awk
是兩個(gè)不同的命令行工具,它們在處理輸入數(shù)據(jù)和執(zhí)行操作時(shí)有一些區(qū)別。
-
功能:
-
xargs
:主要用于從標(biāo)準(zhǔn)輸入中讀取數(shù)據(jù),并將其作為參數(shù)傳遞給指定的命令。它可以將輸入數(shù)據(jù)分割為單個(gè)參數(shù),并將這些參數(shù)傳遞給命令進(jìn)行處理。xargs
通常用于處理文件列表、批量執(zhí)行命令等場景。 -
awk
:是一種強(qiáng)大的文本處理工具,用于從輸入文本中提取和處理數(shù)據(jù)。它基于行進(jìn)行操作,并可以根據(jù)指定的規(guī)則和模式進(jìn)行數(shù)據(jù)匹配、轉(zhuǎn)換和輸出。awk
通常用于處理結(jié)構(gòu)化文本數(shù)據(jù)、數(shù)據(jù)分析和報(bào)告生成等任務(wù)。
-
-
數(shù)據(jù)處理:
-
xargs
:將輸入數(shù)據(jù)作為參數(shù)傳遞給命令,每個(gè)參數(shù)通常是以空格或換行符分隔的文本。xargs
可以根據(jù)需要對輸入進(jìn)行分割和重組,然后將其傳遞給命令進(jìn)行處理。 -
awk
:以行為單位處理輸入數(shù)據(jù),可以根據(jù)指定的字段分隔符對每一行進(jìn)行分割,并對每個(gè)字段進(jìn)行操作。awk
提供了豐富的內(nèi)置函數(shù)和操作符,可以進(jìn)行數(shù)據(jù)過濾、轉(zhuǎn)換、計(jì)算和格式化等操作。
-
-
使用場景:文章來源:http://www.zghlxwxcb.cn/news/detail-755950.html
-
xargs
:適用于需要將輸入數(shù)據(jù)作為參數(shù)傳遞給命令進(jìn)行處理的場景,如批量執(zhí)行命令、刪除文件、移動(dòng)文件等。 -
awk
:適用于需要對結(jié)構(gòu)化文本數(shù)據(jù)進(jìn)行處理和分析的場景,如數(shù)據(jù)提取、數(shù)據(jù)轉(zhuǎn)換、數(shù)據(jù)篩選、報(bào)告生成等。
-
總結(jié)而言,xargs
主要用于處理命令行參數(shù),將輸入數(shù)據(jù)作為參數(shù)傳遞給命令執(zhí)行,而awk
主要用于處理文本數(shù)據(jù),對每一行進(jìn)行分割和操作。它們在功能和使用場景上有所不同,可以根據(jù)具體需求選擇合適的工具。文章來源地址http://www.zghlxwxcb.cn/news/detail-755950.html
到了這里,關(guān)于Linux筆記之刪除指定目錄下除最新修改的以 .pack 為擴(kuò)展名的文件之外的所有文件的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!