2014-03-13 36 views

回答

33
find ./ -name '*article*' -exec mv {} ../backup \; 

OR

find ./ -name '*article*' | xargs -I '{}' mv {} ../backup 
+0

當我運行你的第二個命令時,它說xargs:無效選項 - I.這裏有什麼問題?我發現它在手冊頁上是一個有效的選項。 – user1015214

+0

@ user1015214 - 此頁面上的4個命令是否都不適合您? – Amit

+0

沒有。如果它有幫助,我在一臺Windows機器上進行git Bash。它似乎在運行linux命令,但我猜它沒有完整的庫? – user1015214

15

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吧。

+0

當我第一次嘗試你的建議時,它說'無效選項-t'。當我嘗試你的第二個,它說-exec命令沒有找到,所以我想它不支持。 – user1015214

+0

聽起來就像你不是在Linux上一樣,因爲這些工具的GNU版本已經有很長一段時間了。我無法找到(原文如此)一個'find',它不支持* some *形式的'-exec' - 也許你錯誤地輸入了命令? – tripleee

0

我發現這真的有用有成千上萬的文件,一個文件夾中:

ls -U | head -10000 | egrep '\.png$' | xargs -I '{}' mv {} ./png 

要將所有的PNG在第10000個文件到子文件夾PNG

+0

正則表達式沒有'egrep'(又名'grep -E'更現代的)語法,你可以將'head'分解出來:'grep -m 10000'\ .png $'',更普遍的你應該[避免' ls' in scripts](https://mywiki.wooledge.org/ParsingLs), – tripleee

+0

你可以用整行編輯我的文章嗎? – Steffan

+0

也許然後'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

-1

xargs的是你的好友在這裏!

並使用它,我已經表明會向你給予極大的控制,以及方式 -

find ./ -name '*article*' | xargs -n1 sh -c "mv {} <path/to/target/directory>" 

說明:

  1. -N1

的行數來考慮每個操作提前

  • SH -c
  • 外殼命令來執行給它的線路按以前條件

  • 「MV {} /目標/路徑」
  • 的移動指令將採取兩種arguments-

    1)線(S)從操作1,即{},自動

    2)移動命令的目標路徑,值代用品如指定

    注:「雙引號」被指定爲允許任意數目的空格或參數用於從接收xargs的參數的外殼命令

    希望它有幫助!

    +0

    爲什麼你需要'-n1',那麼'sh -c'包裝的目的是什麼?這件事。與其他較老的類似答案相比,帶來了一些缺點。 – tripleee

    +0

    感謝您的反饋。我一直在使用這種語法。你能指導我的缺點嗎?它只會幫助我獲得更好的信息 – nitinr708

    +0

    如果你只循環一個參數,'sh -c'就沒用了。另一方面,'-n 1'基本上使'xargs'也是無用的;如果你一次只移動一個文件,只需運行'find -exec'。儘管一次只處理一個文件是非常浪費的;你通常應該儘量減少子進程的數量。之前的答案實現了各種優化來做到這一點,有些比其他更積極和強大。 – tripleee

    相關問題