第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

捕獲查找的輸出。-print0進(jìn)入bash數(shù)組

捕獲查找的輸出。-print0進(jìn)入bash數(shù)組

捕獲查找的輸出。-print0進(jìn)入bash數(shù)組使用find . -print0似乎是獲取bash中文件列表的唯一安全方法,因?yàn)槲募赡馨崭?,換行符,引號等。但是,我很難讓find的輸出在bash或其他命令行實(shí)用程序中有用。我設(shè)法使用輸出的唯一方法是將它傳遞給perl,并將perl的IFS更改為null:find . -print0 | perl -e '$/="\0"; @files=<>; print $#files;'此示例打印找到的文件數(shù),避免文件名中的換行符損壞計(jì)數(shù)的危險,如下所示:find . | wc -l由于大多數(shù)命令行程序不支持空分隔輸入,我認(rèn)為最好的方法是捕獲find . -print0bash數(shù)組中的輸出,就像我在上面的perl片段中所做的那樣,然后繼續(xù)執(zhí)行任務(wù),無論它是什么是。我怎樣才能做到這一點(diǎn)?這不起作用:find . -print0 | ( IFS=$'\0' ; array=( $( cat ) ) ; echo ${#array[@]} )一個更普遍的問題可能是:如何用bash中的文件列表做有用的事情?
查看完整描述

3 回答

?
繁華開滿天機(jī)

TA貢獻(xiàn)1816條經(jīng)驗(yàn) 獲得超4個贊

Greg的BashFAQ無恥地偷走了:

unset a iwhile IFS= read -r -d $'\0' file; do
    a[i++]="$file"        # or however you want to process each filedone < <(find /tmp -type f -print0)

請注意,此處使用的重定向構(gòu)造(cmd1 < <(cmd2))與更常用的管道(cmd2 | cmd1)相似但不完全相同- 如果命令是shell內(nèi)置的(例如while),管道版本在子shell中執(zhí)行它們,以及它們設(shè)置的任何變量(例如陣列a)在退出時丟失。 cmd1 < <(cmd2)只在子shell中運(yùn)行cmd2,因此數(shù)組將超過其構(gòu)造。警告:這種重定向形式僅在bash中可用,在sh仿真模式下甚至不是bash; 你必須用你的腳本開始#!/bin/bash。

此外,因?yàn)槲募幚聿襟E(在這種情況下,只是a[i++]="$file",但你可能想在循環(huán)中直接做一些更好的事情)將其輸入重定向,它不能使用任何可能從stdin讀取的命令。為了避免這種限制,我傾向于使用:

unset a iwhile IFS= read -r -u3 -d $'\0' file; do
    a[i++]="$file"        # or however you want to process each filedone 3< <(find /tmp -type f -print0)

...通過單元3傳遞文件列表,而不是stdin。


查看完整回答
反對 回復(fù) 2019-08-26
?
一只甜甜圈

TA貢獻(xiàn)1836條經(jīng)驗(yàn) 獲得超5個贊

也許你正在尋找xargs:

find . -print0 | xargs -r0 do_something_useful

選項(xiàng)-L 1對你也很有用,這使得xargs exec do_something_useful只有1個文件參數(shù)。


查看完整回答
反對 回復(fù) 2019-08-26
?
開心每一天1111

TA貢獻(xiàn)1836條經(jīng)驗(yàn) 獲得超13個贊

主要問題是,分隔符NUL(\ 0)在這里沒用,因?yàn)椴豢赡転镮FS分配NUL值。因此,作為優(yōu)秀的程序員,我們需要注意的是,我們程序的輸入是它能夠處理的。

首先,我們創(chuàng)建一個小程序,為我們完成這一部分:

#!/bin/bashprintf "%s" "$@" | base64

...并將其命名為base64str(不要忘記chmod + x)

其次,我們現(xiàn)在可以使用一個簡單而直接的for循環(huán):

for i in `find -type f -exec base64str '{}' \;`do 
  file="`echo -n "$i" | base64 -d`"
  # do something with filedone

所以訣竅是,base64-string沒有任何跡象會導(dǎo)致bash出現(xiàn)問題 - 當(dāng)然xxd或類似的東西也可以完成這項(xiàng)工作。


查看完整回答
反對 回復(fù) 2019-08-26
  • 3 回答
  • 0 關(guān)注
  • 611 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號