指定したフォルダーにあるリンク切れファイルのシンボリックリンクを自動的に削除するスクリプト
2022-01-03 04:25:54
指定したフォルダー内のリンク切れファイルのシンボリックリンクをスクリプトで自動的に解除する
指定したフォルダー内のリンク先ファイルのシンボリックリンクを消去するスクリプトです。
Linuxを使っていると、自分のファイルやプログラムの多くにシンボリックリンクを作成して、いちいち対応するフォルダに探しに行かなくても、よくアクセスする必要のあるファイルだけにシンボリックリンクを作成して、よくアクセスするファイルをデスクトップに置いたり、他のフォルダに指定したりすることがよくありますね。
これは、アクセスは簡単ですが、使用後にシンボリックリンクが多く残り、ユーザーが手動で削除可能かどうかを確認する必要があり、linuxを使う上で多くの不都合が生じます。このスクリプトを使用すると、スクリプトを実行するだけで、対応するフォルダーから未使用のシンボリックリンクを削除することができ、手が空きます。
#! /bin/bash
# A file that can test for broken symbolic links and can output the files they point to
# so that they can provide the output to xargs for processing :)
# For example. broken-link.sh /somedir /someotherdir|xargs rm
#rm
# The following method is, by all accounts, a better way:
#find
#find "somedir" -type l -print0|\
#xargs -r0 file|\
#grep "broken symbolic"|
#sed -e 's/^\|: *broken symbolic.*$/"/g'
#s
#but this is not a pure bash script, at least not yet.
# Note: Beware of using it in the /proc filesystem and any dead-loop links!
##############################################################
#If no arguments are passed to the script, then use
#current directory. Otherwise it uses the argument passed in as the directory
# to search.
####################
[ $# -eq 0 ] && directorys=`pwd` || directorys=$@
# Write the function linkchk to check if the directories or files passed in are links,
# and determine if these files or directories exist. It then prints the files to which they refer.
#If the passed-in element contains a subdirectory,
#then put the subdirectory in the linkcheck function, so that the recursive purpose is achieved.
##########
linkchk () {
for element in $1/*; do
[ -h "$element" -a ! -e "$element" ] && echo \"$element\"
[ -d "$element" ] && linkchk $element
# Of course, '-h' is used to test symbolic links, and '-d' is used to test directories.
done
}
# Send each argument passed to the script to the linkchk function for processing,
# check for available directories. If not, then print an error message and
#usage information.
################
for directory in $directorys; do
if [ -d $directory ]
then linkchk $directory
else
echo "$directory is not a directory"
echo "Usage: $0 dir1 dir2 ... "
fi
done
exit 0
# Create a new file name
andrew@andrew:/work/bash/src$ touch name
# Create a symbolic link for name
andrew@andrew:/work/bash/src$ ln -s name aaa
# Delete the name file and aaa will become a symbolic link to the missing link file
andrew@andrew:/work/bash/src$ rm name
# View aaa as a symbolic link to the name file in the current directory
andrew@andrew:/work/bash/src$ ls -l
Total usage 44
lrwxrwxrwx 1 andrew andrew 4 Feb 1 13:20 aaa -> name
-rwxrwxr-x 1 andrew andrew 8656 Jan 30 14:46 a.out
-rw-rw-r-- 1 andrew andrew 1887 Feb 1 13:08 broken_link.sh
-rw-rw-r-- 1 andrew andrew 322 Jan 29 13:08 echo_unique.sh
-rw-rw-r-- 1 andrew andrew 1513 Jan 29 15:55 escape_charater.sh
-rw-rw-r-- 1 andrew andrew 279 Jan 30 13:48 exit_example.sh
-rw-rw-r-- 1 andrew andrew 199 Feb 1 11:52 if_else_more.sh
-rw-rw-r-- 1 andrew andrew 1946 Jan 30 21:03 if_true.sh
-rw-rw-r-- 1 andrew andrew 337 Jan 29 14:02 single_quotation_mark.sh
-rw-rw-r-- 1 andrew andrew 864 Feb 1 12:00 test.c
# Call script to clear symbolic links in current folder with missing link files
andrew@andrew:/work/bash/src$ bash broken_link.sh . / | xargs rm
andrew@andrew:/work/bash/src$ ls -l
Total usage 44
-rwxrwxr-x 1 andrew andrew 8656 Jan 30 14:46 a.out
-rw-rw-r-- 1 andrew andrew 1887 Feb 1 13:08 broken_link.sh
-rw-rw-r-- 1 andrew andrew 322 Jan 29 13:08 echo_unique.sh
-rw-rw-r-- 1 andrew andrew 1513 Jan 29 15:55 escape_charater.sh
-rw-rw-r-- 1 andrew andrew 279 Jan 30 13:48 exit_example.sh
-rw-rw-r-- 1 andrew andrew 199 Feb 1 11:52 if_else_more.sh
-rw-rw-r-- 1 andrew andrew 1946 Jan 30 21:03 if_true.sh
-rw-rw-r-- 1 andrew andrew 337 Jan 29 14:02 single_quotation_mark.sh
-rw-rw-r-- 1 andrew andrew 864 Feb 1 12:00 test.c
概要
以上、スクリプトを使って、指定されたフォルダー内のリンクされていないファイルのシンボリックリンクを自動的にクリアする方法を紹介しましたが、お役に立ちましたか?
関連
-
Visual studio 2019 初心者向けサードパーティライブラリ追加チュートリアル(入門編)
-
ASPでAdodbを経由して大容量ファイルをマルチスレッドでダウンロードするためのストリーム。
-
C言語による配列への要素の追加と削除
-
msxml3.dll Error 800c0019 システムエラー:-2146697191 解決策
-
asp createTextFileはutf8をサポートしたテキストファイルを生成します。
-
ASPメッセージプロンプト機能およびリターンまたはターン
-
aspのドメインアクセス制限コード
-
従来のいくつかの方法によるASPエラーの捕捉
-
Perlの単一行コメントと複数行コメントの紹介
-
Perl 構文による Perl 演算子の使用法ガイド
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Net coreのホットプラグ機構とアンインストールに関する問題点ヘルプガイド
-
ASP + ajaxはトップを達成するために、同じサポートと反対側のコードのステップ
-
JSONデータを扱うASP実装コード
-
Webform 組み込みオブジェクト セッションオブジェクト、アプリケーショングローバルオブジェクト、ViewState 詳細
-
FluentValidationを使ったルール検証のためのNET Core
-
aspで文字列を数値に変換する関数のまとめ
-
perl use vars pragma 使用のヒント
-
スペースがセパレータである場合の perl qw 問題の解決法
-
perlのsrand()とtime関数の使い方の紹介
-
perlの尖ったブラケット演算子(<>)について