6

find コマンドの結果からシンボリック リンク (ソフト リンク) を作成しようとしています。ファイル名の前にある ./ を削除するために sed を使用しています。リンクが保存されるパスの最後にファイル名を貼り付けることができるように、これを行っています。私はUbuntu Server 8.04でこれに取り組んでいます。

私はこの投稿から学びました。これは私の問題に対する一種の解決策ですが、完全ではありません-

LINUX の別のディレクトリにある特定のファイルへのシンボリック リンクを選択的に作成するにはどうすればよいですか?

結果のファイル名は機能しませんでしたが、awk の学習を開始し、sed に決定しました。

これを実現するために、1 行のループを使用しています。問題は、ループの構造がファイル名を分離し、ファイル名の各単語のリンクを作成していることです。かなりの数のファイルがあり、リンク先のファイルのファイル名を取得する各リンクでプロセスを自動化したいと考えています。

基本的な bash コマンドには慣れていますが、コマンド ラインの専門家にはほど遠いです。これを ls と awk で開始し、find と sed に移行しました。私の sed 構文はおそらくもっと良いかもしれませんが、これを 2 日間で学習したので、ちょっと行き詰まっています。

完了しfind -type f -name "*txt*" | sed -e 's/.//' -e 's$/$$'; do echo ln -s $t ../folder2/$t;

ヘルプやヒントをいただければ幸いです。ありがとう。

4

2 に答える 2

2

次のように for ループを実行します。

(IFS=$'\n'; for t in `find -type f -name "*txt*" | sed 's|.*/||'`; do ln -s $t ../folder2/$t; done)

IFS を改行のみに設定することにより、スペースで分割されることなくファイル名全体を読み取ることができるはずです。

括弧は、ループがサブシェルで実行され、現在のシェルの IFS が変更されないようにするためのものです。

于 2012-11-27T05:29:27.313 に答える