亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何將-I和-n與xargs結合使用?

如何將-I和-n與xargs結合使用?

開滿天機 2021-04-09 13:34:55
我想使用find和移動大量文件xargs。通常我會這樣做:find /foo -name 'bar*' | tr '\n' ' ' | xargs -I % echo mv % /dest但是,當要移動的文件太多時,我達到了傳遞給的參數數量的限制mv。xargs有一個-n似乎非常適合的方法:$ echo {0..9} | xargs -n 3 echo0 1 23 4 56 7 89然而,-I暗示-L 1,所以我不能用-I同-n:$ echo {0..9} | xargs -n 3 -I % echo % /dest0 1 2 3 4 5 6 7 8 9 /dest我希望這樣的行為:$ echo {0..9} | xargs -n 3 -I % echo % /dest0 1 2 /dest3 4 5 /dest6 7 8 /dest9 /dest這可能xargs嗎?我的機器上沒有GNU Parallel。
查看完整描述

3 回答

?
白板的微信

TA貢獻1883條經驗 獲得超3個贊

mv命令(至少來自Linux coreutils)具有方便的-t標志,該標志與該用例完全匹配:

find /foo -name 'bar*' | tr '\n' ' ' | xargs mv -t /dest

以上還支持保留任何怪異文件名而無需文件名按摩

find /foo -name 'bar*' -print0 | xargs -0 mv -t /dest

如果出于某種原因想要照常使用mv,下面的方法也可以工作(即使用sh scriptlet “使用”所有參數($@)):

find /foo -name 'bar*' | tr '\n' ' ' | xargs sh -c 'mv "$@" /dest' --


查看完整回答
反對 回復 2021-04-16
?
慕絲7291255

TA貢獻1859條經驗 獲得超6個贊

該mv命令(至少來自Linux coreutils)具有方便的-t標志,該標志與該用例完全匹配:


find /foo -name 'bar*' | tr '\n' ' ' | xargs mv -t /dest

以上還支持保留任何怪異文件名而無需文件名按摩:


find /foo -name 'bar*' -print0 | xargs -0 mv -t /dest

如果出于某種原因想要照常使用mv,下面的方法也可以工作(即使用sh scriptlet “使用”所有參數($@)):


find /foo -name 'bar*' | tr '\n' ' ' | xargs sh -c 'mv "$@" /dest' --


查看完整回答
反對 回復 2021-04-16
?
至尊寶的傳說

TA貢獻1789條經驗 獲得超10個贊

如果您要使用來查找常規文件find,則應使用-type f,否則可能會找到目錄。xargs您無需在這里使用,因為您已經內置了該功能find。


使用GNU mv:


find /foo -type f -name 'bar*' -exec mv -t /dest {} +

這不會檢測到具有相同名稱的目標文件。為此,請使用


find /foo -type f -name 'bar*' -exec sh -c '

    for name do

        destname="/dest/${name##*/}"

        if [ ! -f "$destname" ]; then

            mv "$name" "$destname"

        else

            printf '%s exists already, will not copy %s\n' "$destname" "$name" >&2

        fi

    done' sh {} +

這將拒絕移動將覆蓋文件的文件/dest(并報告這些文件)。


這些命令將與所有有效的Unix文件名一起使用。


查看完整回答
反對 回復 2021-04-16
  • 3 回答
  • 0 關注
  • 388 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號