stdinを介してコマンドを送信していますが、どのようにパスパラメータを安全な方法で送信できますか?
例えば
stat /some strange/p"at\nh'/
パスが奇妙で失敗しました。パスを変数や他の方法で保存して操作できますか?それとも、これらの奇妙なパスが送信される前にこれを回避する簡単な方法はありますか?
編集する: より明確に言えば、奇妙なパスに有効な posix ファイル名文字を含めることができます。以下に作成された奇妙なディレクトリを処理する例は次のとおりです。
mkdir """
'''\n
"
答え1
難しい部分は、この奇妙なパスを定義することです。あなたがそれを思い出に正確に持っていれば、それを持って仕事をすることができます。ここにあるドキュメントを使ってそれをインポートし、some strange/p"at\nh'/
ローカルで動作するように定義します(/
最初から始める必要はありません)。
$ p="$(cat<<EOF
some strange/p"at\nh'/
EOF
)"
$ echo "$p"
some strange/p"at\nh'/
$ mkdir -p -- "$p"
tomasz@tomasz-laptop-f:~/x$ stat -- "$p"
File: some strange/p"at\nh'/
Size: 4096 Blocks: 8 IO Block: 4096 directory
Device: fe05h/65029d Inode: 4983105 Links: 2
Access: (0755/drwxr-xr-x) Uid: ( 1000/ tomasz) Gid: ( 1000/ tomasz)
Access: 2019-03-06 08:50:05.116674683 +0100
Modify: 2019-03-06 08:50:05.116674683 +0100
Change: 2019-03-06 08:50:05.116674683 +0100
Birth: -
答え2
ファイルが多すぎない場合は、**
ループを解いてstat
友達に渡すことができます。
for item in **
do
stat -- "$item"
lsattr -- "$item"
done
またはを使用できますfind -print0
。これにより、一致するファイル名を選択してさまざまな方法で処理できます。
find . -type f -print0 |
while read -d $'\0' item
do
stat -- "$item"
lsattr -- "$item"
done