Ubuntu Linuxには、次のように深刻に破損したシンボリックリンクがたくさんあります。
$ ls -l setup.conf
lrwxrwxrwx 1 ont ont 27 Aug 19 15:26 setup.conf -> '# Source it'$'\r''. ../setup.conf'
. ../setup.conf
これは、プロジェクト内のすべてのシンボリックリンクをターゲットファイルのコメントとソース呼び出し( "")に置き換えようとした結果です。これらはすべて# Source it\n. .../setup.conf
シンボリックリンクビットを含む実際のテキストファイルです(例: "")。これはgitとwindowsを使って行われます。
1つの理論的な修正は、"symlinkビット"を削除し、結果のテキストファイルを変更せずにそのままにすることです。しかし、そうする方法はありません。 (chmod
他のツールではこれを「ぶら下げシンボリックリンク」として見て、テキストファイルで動作することを拒否します。それ自体)。
ls
別の修正方法は、上記のコマンドで得られたものと同じ内容で新しいファイルを手動で作成することです。面倒でエラーが発生しやすく、ファイルが同じではないため、これを行わないことをお勧めします。
# Source it<newline>. ../setup.conf'
編集:追加:内容が " "であるsetup.confという名前の一般的なファイルで終わりたいです。
ベストアンサー1
シンボリックリンクを変更したいのかテキストファイルに置き換えたいのかわかりません。このソリューションはシンボリックリンクをテキストファイルに置き換えます。
find -type l -exec bash -c '
for f in "$@"
do
t=$(readlink "$f")
rm -f "$f"
printf "%s\n" "$t" >"$f"
done
' _ {} +
rm
printf
作成するのではなく、削除、修正によって"$f.tmp.txt"
非破壊テストを行うことができます"$f"
。 (.tmp.txt
後でテキストファイルを削除することを忘れないでください。)
\r
読みやすくするには、\n
次のように変更できます。
printf "%s\n" "${t//'$'\r/\n''}" >"$f" # non-POSIX
printf "%s\n" "$t" | tr "\r" "\n" >"$f" # POSIX