特定のパスですべてのディレクトリを探し、そのディレクトリ内の別の場所にある同じ名前のディレクトリへのソフトリンクを作成しようとしています。多くのディレクトリには名前にスペースがあります。次のコードを一緒にまとめてみると、空白がない限り正しく動作するようです。
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 dest
toの代わりにto toとしてシンボリックリンクが生成されます。source
dest
dest
source
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 {} +