0

ファイル名にはスペースと改行が含まれている可能性がある\nため、フィールド区切り文字として null 文字を使用しています。findしかし、入力ディレクトリがヌル文字で区切られていると言う方法がわかりません。

私の失敗した試み:

foo()
{
  IFS='\0'
  find "$@"
}

$ mkdir 'oneword' 'two words'
$ IFS='\0' foo $(realpath -z 'oneword' 'two words')

find入力ディレクトリがゼロで区切られていることを確認する方法は?

4

1 に答える 1

2

1 つの方法は、xargs を使用することです。

realpath -z 'oneword' 'two words' | xargs -0 find

または:

foo() {
  local A=() I=0 IFS=''
  while read -rd $'\0' A[I++]; do :; done 
  find "${A[@]}"
}
realpath -z 'oneword' 'two words' | foo  ## Under subshell or pipe
foo < <(realpath -z 'oneword' 'two words')  ## No subshell

必要に応じて別の fd を使用できます。

foo() {
  local A=() I=0 IFS=''
  while read -rd $'\0' -u 4 A[I++]; do :; done 
  find "${A[@]}"
}
foo 4< <(realpath -z 'oneword' 'two words')

注: IFS を使用して変数の値を複数の引数に分割すると、パス名の拡張が発生する可能性があり、推奨できません。IFS も変更する必要があり、他の機能に影響を与える可能性があります。

于 2013-09-15T12:25:59.150 に答える