「rm:書き込み禁止の一般ファイル[x]を削除しますか?」への回答を探しています。
bashrcから文字を複数回エクスポートし、キャリッジリターンを複数回エクスポートしようとしています。私たちは何をすべきですか?
答え1
更新された質問に基づいて修正:
ファイルを削除するかどうかを尋ねるメッセージを表示したくない場合は、-f
(「force」)オプションを追加してください。
rm -f /path/to/file
これには副作用があることに注意してください。指定されたパスが存在しない場合、そのパスはいいえこれを報告すると正常に返されます。
$ rm -f /nonexistent/path
$ echo $?
0
元の答え:
簡単な解決策は次のとおりです。
yes "$string" | head -n $number | tr $'\n' $'\r'
yes
改行で区切って、ユーザーが提供した文字列を無限に繰り返します。複数回使用したhead
後に停止し$number
、tr
改行文字をキャリッジリターンに変換します。キャリッジリターンによって出力が表示されない場合がありますが、それを次のコマンド(bash
)に渡すと説明されます。
printf %q "$(yes "$string" | head -n $number | tr $'\n' $'\r')"
ないユーザーはbash
結果にパイプするod
か、返された実際の文字を表示できますhexdump
。xxd
答え2
rm
質問するようにハードコードされています。インタラクティブに書き込み禁止ファイルについて。 「インタラクティブ」とは、質問を印刷してからユーザー入力を待つことを意味します。
質問を防ぐ方法は2つありますrm
。
rm -rf somedir
^
そして
rm -r --interactive=never somedir
^^^^^^^^^^^^^^^^^^^
-r
(どちらもディレクトリの代わりにファイルを削除しても機能します)
説明する:
-f
rm
「存在しないファイルとパラメータを無視してメッセージを表示しない」を有効にします。
--interactive=never
説教することをしなさい: 決して相互作用しないで下さい。つまり、プロンプトを表示しません。
-f
との違いは、--interactive=never
「存在しないファイルと引数を無視する」部分です。
比較する:
$ rm -rf nonexistingname
$ echo $?
0
そして
$ rm -r --interactive=never nonexistingname
rm: cannot remove 'nonexistingname': No such file or directory
$ echo $?
1
rm
対話をしたくないが、それでもエラーを処理したいスクリプトを書くときの違いは主に興味深いです。
要約:コマンドラインで使用されますrm -rf
。rm -r --interactive=never
ボーナス:スクリプト中で削除したいファイル名が外部から来た場合は、奇妙なファイル名と悪意のある入力を防ぐために衛生対策を講じる必要があります。
rm -r --interactive=never -- "./$filename"
重要な部分:--
ダッシュで始まるファイル名を回避するには、オプションの末尾を二重ダッシュ()でマークし、ファイル名にスペースを含めないようにするには、引用符を使用してファイル名がダッシュ./
で始まるのを二重に防止し、すべてのファイルを強制します。適用するには、ドットスラッシュ()を使用してください。作業ディレクトリ。
詳しくはこちらをご覧ください。https://www.cyberciti.biz/faq/unix-linux-remove-strange-names-files/
指定された質問(「保護されたファイルを削除するときに「y」を複数回実行しない方法」)への回答については、次を参照してください。https://askubuntu.com/questions/338857/automatically-enter-input-in-command-line/338860#338860
答え3
私が時々経験するもう一つの問題は、/etc/bashrcに次のrm
エイリアスがあることです:rm -i
alias rm='rm -i'
この場合、エイリアスunalias rm
が指定されたコマンドの前にバックスラッシュを配置してエイリアスを一度無視するために、数年前に私が見つけたこのトリックを使用することもできます。たとえば、次のようになります。
\rm somefile
次の記事では、エイリアスの詳細を学ぶことができます。ニッククラフト。
答え4
私も同じ問題に直面しました。上記の答えは1つのファイルにのみ適用されますが、多くのファイルを無視する場合は例です。
あなたはそれを使用することができます
sudo rm -r /path/to/directory
書き込み禁止の一般ファイルをすべて削除