文字列と特殊文字を「検索」使用する方法は?

文字列と特殊文字を「検索」使用する方法は?

一部のシーケンシャル操作(一部のコピー、暗号化、アップロード、および単純な論理チェック)を実行するために(最初に)bashシェルスクリプトを作成しようとしたときに返されるfind文字列が原因で問題が発生しています。特殊文字/\*)'("とスペースがあります。

を使用してこの問題を解決するための提案を見ましたが、printf %q正しいbash構文が見つかりませんでした。

以下は、文字列を変更する方法の抜粋です。

#!/bin/sh

find "/upload" -type f |
    while read -r path; do
        fixedpath=printf %q "$path"
        fixedpath=printf '%q' "$path"
        fixedpath=printf '%q' $path
        fixedpath=printf "%q" "$path"
        fixedpath="printf %q $path"
        fixedpath="printf '%q' $path"
        fixedpath=$(printf '%q' $path)
        echo $path >> list.txt
        echo $fixedpath >> list.txt
    done
exit 0

この関数を作成する6〜12の異なる方法を考えることができますがprintf、他のコマンドにパラメータとして渡すために有効なパスを返すにはどのような方法を使用する必要がありますか?

Ubuntu 16で働いています。

ベストアンサー1

find特に奇妙でクールなファイル名を期待している場合は、出力を解析しないでください。

代わりに実行する必要があるコマンドを実行する-execか、コマンド自体にスクリプトを挿入しますfind

find /upload -type f -exec sh -c '
    for pathname do
        printf "Would do something with \"%s\" here...\n" "$pathname"
    done' sh {} +

もちろん、インクルードスクリプトを独自のファイルに入れることもできます。

#!/bin/sh

for pathname do
    printf 'Would do something with "%s" here...\n' "$pathname"
done

それから...

find /upload -type f -exec /path/to/script.sh {} +

このトピックに関する追加資料:

おすすめ記事