1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[AIX]findでアスタリスクを使用する際の注意

Posted at

下記のディレクトリ構成が検証しています。

# find .
.
./a
./a/test1
./b
./b/test2
./c
./c/test3
# find . -xdev -name test
./test
# find . -xdev -name test1
./a/test1

-name test、-name test1の場合は、想定通りの結果が得られます。

# find . -xdev -name test*
./test

しかし、-name testとすると./testしか出力されません。
これは、カレントディレクトリにtestというtest
に該当するファイルが存在するため、findコマンドに引数が渡される前にkshがアスタリスクを展開してしまうためです。

# truss -a find . -xdev -name test* 2>&1 | grep argv
 argv: find . -xdev -name test

この動きはtrussで確認することができます。

# find . -xdev -name t*1
./a/test1
# truss -a find . -xdev -name t*1 2>&1 | grep argv
 argv: find . -xdev -name t*1

-name t*1など、カレントディレクトリにパターンにマッチするファイルが存在しない場合はアスタリスクが展開されずにそのままfindコマンドに渡されるため、サブディレクトリのtest1が表示されます。

# find . -xdev -name "test*"
./a/test1
./b/test2
./c/test3
./test
# truss -a find . -xdev -name "test*" 2>&1 | grep argv
 argv: find . -xdev -name test*

カレントディレクトリにマッチするファイルが存在する場合でも、ダブルクォーテーションで囲むことでアスタリスク展開が抑止されるため意図した結果が得られます。

# set -o noglob
# find . -xdev -name test*
./a/test1
./b/test2
./c/test3
./test
# ksh -fc "find . -xdev -name test*"
./a/test1
./b/test2
./c/test3
./test

また、noglobや-fオプションを使用することでもアスタリスク展開を抑止することができます。

1
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?