![](/img/trans.png)
[英]combine linux `find` and `cp` with output if file is not found
[英]Linux CP using AWK output
我一直在努力學習更多關於Linux的知識,並且今天早上專注於awk命令。 我一直試圖開始工作的命令如下。
ls -lRt lpftp.* | awk '{print $7, $9}' | mkdir -p $(awk '{print $1}') | ls -lRt lpftp.* | cp $(awk '{print $9, $7}')
本質上,我試圖根據上次修改日的文件將目錄中的每個文件移動到子目錄中。 該命令首先只打印我想要的文件,然后使用mkdir根據上次修改的月份創建一個文件夾。 之后我想要做的是將每個文件移動到其關聯的目錄中,但是現在命令是將每個文件移動到01文件夾中並打印出以下文本
cp: 0653-436 12 is a directory.
Specify -r or -R to copy.
每個目錄一次。
有誰知道如何解決這個問題? 或者,如果有更好的方法去做呢?
ls -lRt lpftp.* | awk '{print $7, $9}' | while read day file ; do mkdir -p "$day"; cp "$file" "$day"; done
do
和done
之間的命令將針對每行輸出執行,第一件事是awk
打印在day
變量中,第二件打印在file
(每行)。 我在這里使用引號有點不必要,因為變量中沒有空格給定它們的設置方法。
做這樣的事情的最安全的方法 - 也是最快的執行 - 是使用awk對數據輸出shell腳本。 在awk中,打印您希望執行的mkdir
和cp
命令。 將結果輸入head (1)直到您滿意為止。 也許看整個事情在以下 (1)。 然后執行如下:
ls -lRg lpfpt.* | awk script.awk | sh -ex
這會將命令回顯到標准錯誤,並在第一個錯誤時停止。 如果你絕對確定它是正確的,請刪除x
選項。
這種方法相對於awk中的循環或一堆子進程(使用system
函數)的優點是:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.