簡體   English   中英

使用bash,如何查找所有包含特定字符串的文件並將其替換為現有文件?

[英]Using bash, how do I find all files containing a specific string and replace them with an existing file?

我正在使用Linux,並希望將包含字符串000000的所有文件替換為現有文件/home/user/offblack.png,但保留現有文件名。 我已經使用-exec和xargs的各種組合進行了一段時間,但是沒有運氣。 到目前為止,我有:

 find | grep 000000

哪個列出了我想更改的所有文件。 如何將這些文件復制並替換為現有的offblack.png文件?

這是我會用的:

find (your find args here) \
| xargs fgrep '000000' /dev/null \
| awk -F: '{print $1}' \
| xargs -n 1 -I ORIGINAL_FILENAME /bin/echo /bin/cp /path/to/offblack.png ORIGINAL_FILENAME

展開,找到所有您感興趣的文件,在其中查找grep字符串'000000'(將/ dev / null添加到文件列表中,以防所生成的fgrep之一僅以一個文件名結尾-這可以確保輸出始終格式化為“文件名:<包含'000000'>的行”),僅刪除文件名,然后一個接一個地復制到這些文件的offblack.png中。 請注意,我在其中插入了/bin/echo 那是你的空想。 刪除回聲,使其真正運行。

如果您的意思是文件名包含“ 000000”:

find . -type f -a -name '*000000*' -exec /bin/echo /bin/cp /path/to/offblack.png {} \;

簡單得多。 :-)在當前目錄下找到每個文件,每個文件的名稱都包含您的字符串,並在其上執行offblack.png的副本。 再次,我給你的是空轉。 刪除現場消防演習的回聲。 :-)

find . -type f | grep 000000 | tr \\n \\0 | xargs -0i+ cp ~/offblack.png "+"

讓我們嘗試更多地使用Bash:

for read -r filename
do
    hit=""
    for read -r
    do
        if [[ $REPLY == *000000* ]]
        then
            hit=$filename
            break
        fi
    done < $filename

    [[ -n $hit ]] && cp /path/offblack.png $filename

done < <(find . -type -f)

搜索的手冊頁更少!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM