如何將'find'(在Linux中)的結果傳輸到不同的目錄?這是我迄今爲止所擁有的。如何在Linux中將「查找」的結果通過管道傳輸到mvv中
find ./ -name '*article*' | mv ../backup
但它沒有正確的(我得到一個錯誤丟失的文件的說法,因爲我沒有指定一個文件,因爲我試圖從管道得到它)
如何將'find'(在Linux中)的結果傳輸到不同的目錄?這是我迄今爲止所擁有的。如何在Linux中將「查找」的結果通過管道傳輸到mvv中
find ./ -name '*article*' | mv ../backup
但它沒有正確的(我得到一個錯誤丟失的文件的說法,因爲我沒有指定一個文件,因爲我試圖從管道得到它)
find ./ -name '*article*' -exec mv {} ../backup \;
OR
find ./ -name '*article*' | xargs -I '{}' mv {} ../backup
xargs
常用於這一點,mv
有一個-t
選項方便一點。
find ./ -name '*article*' | xargs mv -t ../backup
如果您find
支持-exec ... \+
你能等效做
find ./ -name '*article*' -exec mv -t ../backup {} \+
的-t
選項可能是一個GNU擴展。這當然可以推出自己的,可能像
find ./ -name '*article*' -exec sh -c 'mv "[email protected]" "$0"' ../backup {} \+
,我們恬不知恥地濫用方便事實sh -c 'commands'
後的第一個論點$0
結束的「腳本名稱」參數,以便我們甚至不需要shift
吧。
當我第一次嘗試你的建議時,它說'無效選項-t'。當我嘗試你的第二個,它說-exec命令沒有找到,所以我想它不支持。 – user1015214
聽起來就像你不是在Linux上一樣,因爲這些工具的GNU版本已經有很長一段時間了。我無法找到(原文如此)一個'find',它不支持* some *形式的'-exec' - 也許你錯誤地輸入了命令? – tripleee
我發現這真的有用有成千上萬的文件,一個文件夾中:
ls -U | head -10000 | egrep '\.png$' | xargs -I '{}' mv {} ./png
要將所有的PNG在第10000個文件到子文件夾PNG
正則表達式沒有'egrep'(又名'grep -E'更現代的)語法,你可以將'head'分解出來:'grep -m 10000'\ .png $'',更普遍的你應該[避免' ls' in scripts](https://mywiki.wooledge.org/ParsingLs), – tripleee
你可以用整行編輯我的文章嗎? – Steffan
也許然後'printf'%s \ 0'* .png | xargs -r0 mv -t png /'避免了'ls'和'printf'%s \ 0'* .png | grep -z -m 10000^| xargs -r0 mv -t png /'巧合地使用'grep -z -m' * items *作爲'head'的替代品,它替代了以null結尾的輸入。我之前發佈的鏈接更詳細地解釋了這些事情。我對改善提倡'ls'的答案存在分歧。但隨意更新,只要您認爲合適,幷包含這些評論中的任何內容或所有內容。順便說一下,'xargs -0'只是GNU(應該可以在Linux上工作,但不能正常移植)。 – tripleee
xargs的是你的好友在這裏!
並使用它,我已經表明會向你給予極大的控制,以及方式 -
find ./ -name '*article*' | xargs -n1 sh -c "mv {} <path/to/target/directory>"
說明:
- -N1
的行數來考慮每個操作提前
- SH -c
外殼命令來執行給它的線路按以前條件
- 「MV {} /目標/路徑」
的移動指令將採取兩種arguments-
1)線(S)從操作1,即{},自動
2)移動命令的目標路徑,值代用品如指定
注:「雙引號」被指定爲允許任意數目的空格或參數用於從接收xargs的參數的外殼命令
希望它有幫助!
當我運行你的第二個命令時,它說xargs:無效選項 - I.這裏有什麼問題?我發現它在手冊頁上是一個有效的選項。 – user1015214
@ user1015214 - 此頁面上的4個命令是否都不適合您? – Amit
沒有。如果它有幫助,我在一臺Windows機器上進行git Bash。它似乎在運行linux命令,但我猜它沒有完整的庫? – user1015214