このコマンドを実行すると動作します。
$ find . -inum 888696 -exec ls '{}' \;
Conversation.pst Outlook Data File Outlook Data File.sbd Trash Unsent Messages
Inbox.pst Outlook Data File.msf Sent.pst Trash.msf Unsent Messages.msf
しかし、ls
それをcd
置き換えるときいいえ働く:
$ find . -inum 888696 -exec cd '{}' \;
find: ‘cd’: No such file or directory
私はcd
それがbash
組み込まれていることを知っているので、これを試しました。いいえ働く:
$ find . -inum 888696 -exec builtin cd '{}' \;
find: ‘builtin’: No such file or directory
cd
コマンドで使用する方法はfind -exec
?
修正する
cd
私がwithを使用したい理由find -exec
は、ディレクトリ名が奇妙なので、私の端末に????
。
答え1
-exec
find
いくつかのコマンドラインオプションと他のパラメータを使用して外部ユーティリティを実行するオプション。
Unixはcd
外部ユーティリティを提供せず、組み込みシェルとしてのみ提供されるため、find
実行できません。少なくともmacOSとSolarisするcd
外部ユーティリティとして提供されます。
見つかったパス名が入ることができるディレクトリであるかどうかをcd
テストする方法を除いて、この方法はほとんど役に立ちません。対話型シェル(または呼び出されるすべての項目)の作業ディレクトリは、とにかく変更されません。find
cd
find
関連:
奇妙な、または入力するのが非常に難しいディレクトリ名に問題があり、そのディレクトリに変更したい場合は、ディレクトリへのシンボリックリンクを作成してから、そのリンクを使用してcd
ディレクトリに入ることを検討してください。
find . -inum 888696 -exec ln -s {} thedir ';'
thedir
これにより、問題のディレクトリを指すシンボリックリンクが作成されます。その後、次のコマンドを使用して作業ディレクトリを変更できます。
cd thedir
(リンクが現在のディレクトリに存在する場合)これにより、どのような方法でもディレクトリが変更されるのを防ぎます。別のアイデアは、同様の方法でディレクトリの名前を変更することですfind
。ただし、他のプログラムでディレクトリが特定の名前を持つことを期待している場合はお勧めできません。
答え2
find
コマンド自体を実行すると、-exec
シェルは含まれません。それでも、ディレクトリへの変更はシェルが終了するまでのみ続きますcd
。
cd
ファイル名を入力するには、現在のシェルにファイル名を送信する必要があります。ファイル名がどれだけ間違っているかに応じて、コマンド置換を使用できます。
cd "$(find . -inum 888696)"
コマンド置換が末尾の改行文字を食べるため、ファイル名が改行文字で終わる場合は機能しません。この場合、find
印刷時に改行を保護し、追加された行を削除する必要があります。
dir=$(find . -inum 888696; echo x)
cd "${dir%?x}"
または、GNUを使用してfind
末尾の改行を印刷しないようにします(ただし、ファイル名の改行はまだ保護されています)。
dir=$(find . -inum 888696 -printf "%px" -quit)
cd "${dir%x}"
また、-quit
述語(また、GNU拡張)を使用して最適化として最初の一致に集中しないでください。
または、内から新しいシェルを起動できますが、find
これは少し見苦しくなります。
find . -inum 888696 -exec bash -c 'cd "$1" && exec bash' sh {} \;
答え3
execでは動作しませんが、これで十分です。
cd "$(find . -inum 888696 -type d)"
確実にするために「-type d」を使用します。何については、私は本当に知らない。
答え4
このメッセージを受け取った場合オペレーティングシステムのプラットフォームに問題があります。POSIX標準では、名前付きコマンドをcd
渡すにはファイルシステムで利用可能である必要がありますexec()
。
今悪いニュースがあります。
OSプラットフォームにバグがなくても警告は表示されませんが、別のプログラムが現在の作業ディレクトリを変更してすぐにシャットダウンした場合には役に立たないため、期待した結果は得られません。
cd
実行されたコマンドを有効にするには、find
次のようにします。
find . -type d -exec sh -c 'cd "$1"; some other command' dummy {} \;