0

由于文件名可能包含空格和换行符\n,我使用空字符作为字段分隔符。但我不知道怎么说find输入目录是空字符分隔的。

我失败的尝试:

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

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

如何判断find输入目录用零分隔?

4

1 回答 1

2

一种方法是使用 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 回答