basenameでfind -execを使用するときにディレクトリにスペースを入れるにはどうすればよいですか?

basenameでfind -execを使用するときにディレクトリにスペースを入れるにはどうすればよいですか?

特定のパスですべてのディレクトリを探し、そのディレクトリ内の別の場所にある同じ名前のディレクトリへのソフトリンクを作成しようとしています。多くのディレクトリには名前にスペースがあります。次のコードを一緒にまとめてみると、空白がない限り正しく動作するようです。

find /some/path/* -maxdepth 0 -exec sh -c "ln -s /some/other/path/"'$(basename {})'" {}" \;

スペースを処理するにはどうすればよいですか?通常、私のディレクトリ名にはこれらのミラーディレクトリはありませんが、これらのミラーディレクトリは私のWindows PCにあり、その中にスペースを使用します。どんな助けでも大変感謝します!

編集する

cuonglmとGillesの主張に対する答え:

  • コマンド引数の順序には何の問題もありませんが、ln -s説明の中で私が望むものが何であるかは明らかではありません。各ディレクトリに/some/path/シンボリックリンクを作成したい存在するこのディレクトリは、で同じ名前のディレクトリを指します/some/other/path//some/other/path/はい、私がこれをしたいのは、インクルードにディレクトリのサブセットがあり、各ディレクトリのサブセットからフルセットへのリンクが欲しいからです。source/some/path/destination/some/path//some/other/path/

  • パスにはディレクトリがあまりありませんが、それを妨げないのは無意味な欠陥であることに同意します。

  • 未使用の理由-type dは、指定されたパスにディレクトリだけがあり、ファイルがないためです。

ベストアンサー1

コマンドにはいくつかの問題があります。

  • /some/path/*以下のディレクトリが多すぎると、パラメータリストが長すぎます。エラーが発生する可能性があります。/some/path

  • ディレクトリやファイルをフィルタリングしません。

  • インラインスクリプトを使用しているため非常に非効率的ですがsh -c-exec ... {} \;

  • lnパラメータの位置が間違っていると、ln -s source desttoの代わりにto toとしてシンボリックリンクが生成されます。sourcedestdestsource


POSIX 方式でこれを行うことができます。

find /some/path ! -path /some/path -prune -type d -exec sh -c '
  for f do
    ln -s "$f" /some/other/path/"${f##*/}"
  done
' sh {} +

またはあなたがfindサポートしている場合-maxdepth

find /some/path -maxdepth 1 -type d -exec sh -c '...' sh {} +

おすすめ記事