タグ付けされた質問 「shell-script」

シェルスクリプト、シェルによって解釈される実行可能ファイル(bash、zshなど)に関する質問。

1
書き込まれているファイルを除くフォルダ内のすべてのファイルをコピーする方法は?
HTTPiedownloadingを介して複数のファイルをフォルダーにダウンロードします。bashスクリプトの目的は、ダウンロードしたファイルを処理することです。ダウンロードしたファイルを別のフォルダーにコピーしようとしました。 find /folder/downloading -type f -exec mv '{}' /folder/downloaded \; しかし、これはまだ終了していないファイルもコピーします。-mmin +5コマンドに追加して、古いファイルへの転送を制限しようとしました。ファイルを書き込んだままにして、ダウンロードしたファイルのみを転送する効率的なコマンドは何ですか?


2
パーティションデバイス名からブロックデバイス名を取得する方法は?
/dev/sdaパーティションデバイス名(例/dev/sda1)を指定して、親ブロックデバイス名(例)を取得するポータブルな方法を探しています。私は最後のキャラクターを落とすことができることを知っていますが、場合によってはうまくいかないでしょう: MMCカードリーダーには通常、などの名前が付いていますが/dev/mmcblk0、パーティションには/dev/mmcblk0p1(余分に注意してくださいp)のような名前が付いています。 オプション:一部のブロックデバイスにはパーティションテーブルがまったくなく、単一のパーティションとしてフォーマットされています。この場合、パーティションデバイスと親ブロックデバイスは同じです。 LVMボリュームは、まったく異なるケトルです。私は今それらをサポートする必要はありませんが、それらを考慮に入れるのに余分な努力がほとんど必要ないなら、私は気にしません。

3
sedまたはawkを再度呼び出さずに、文字列からドット文字を削除するにはどうすればよいですか?
次のhostlist.txtようなテキストを含むというファイルがあります。 host1.mydomain.com host2.mydomain.com anotherhost www.mydomain.com login.mydomain.com somehost host3.mydomain.com 次の小さなスクリプトがあります。 #!/usr/local/bin/bash while read host; do dig +search @ns1.mydomain.com $host ALL \ | sed -n '/;; ANSWER SECTION:/{n;p;}'; done <hostlist.txt \ | gawk '{print $1","$NF}' >fqdn-ip.csv 出力先fqdn-ip.csv: host1.mydomain.com.,10.0.0.1 host2.mydomain.com.,10.0.0.2 anotherhost.internal.mydomain.com.,10.0.0.11 www.mydomain.com.,10.0.0.10 login.mydomain.com.,10.0.0.12 somehost.internal.mydomain.com.,10.0.0.13 host3.mydomain.com.,10.0.0.3 私の質問は.、コンマの直前を削除せずにsed、gawk再度呼び出すことはできませんか?ドットを取り除く既存の呼び出しsedまたはgawk呼び出しで実行できるステップはありますか? hostlist.txt 数千のホストが含まれるので、スクリプトを高速かつ効率的にしたいです。

4
特定の行番号にテキストを挿入する
行のデータに応じてテキストドキュメントの内容を分割するbashスクリプトに取り組んでいます。 元のファイルの内容が次の行に沿っていた場合 01 line 01 line 02 line 02 line bashを使用してこのファイルの3行目に挿入するにはどうすればよいですか 01 line 01 line text to insert 02 line 02 line 私はヒアドキュメントまたは私のスクリプトに似たものを使用してこれを行うことを望んでいます #!/bin/bash vim -e -s ./file.txt <<- HEREDOC :3 | startinsert | "text to insert\n" :update :quit HEREDOC 上記はもちろん機能しませんが、このbashスクリプトに実装できる推奨事項はありますか?

4
Bashのビルトインexecの使用例/実用例
Bashの組み込みexecのドキュメントからこれを考慮してください。 execは、新しいプロセスを作成せずにシェルを置き換えます ユースケース/実用例を提供してください。これが理にかなっているのかわかりません。 私はグーグルでI / Oリダイレクトについて知りました。もっと説明してもらえますか?


1
iotopなしでI / Oを実行するプロセスを知る
Linuxでは、どのプロセスがディスクI / O帯域幅を使用しているかを知りたいです。 使用できることは知っていますiotopが、さまざまな理由でiotopインストールできないマシンがあります。 その情報を手動で取得するにはどうすればよいですか?(iotopそれ自体はどのように進みますか?)

7
kshのバージョンを安全に入手するにはどうすればよいですか?
kshスクリプト内からkshのバージョンを安全に取得するにはどうすればよいですか? 私は次の解決策を見ました: ksh --version echo ${.sh.version} echo $KSH_VERSION そして、適切な状況を考えると、これらはそれぞれ正常に機能します。しかし、私は完璧ではないケースに関心があります。 具体的には、古いバージョンのkshを使用しているいくつかのマシンがありますが、私の目的のために、機能が大幅に不足しています。とにかく、バージョンを(プログラムで)チェックする理由は、kshバージョンが性能の低いバージョンの1つであるかどうかを確認するためです。もしそうなら、あまり素晴らしいコードではないブランチを実行したいです。 しかし、問題のあるマシンでは、シェルの無能さはバージョンのチェックにまで及びます... 試してみるとksh --version、何も表示されず、ksh!の新しいインスタンスが開きます。 私が試みるならecho ${.sh.version}、kshこれを捨てることができない構文エラーとしてこれを扱います2> /dev/null。 $ echo ${.sh.version} 2> /dev/null ksh: ${.sh.version}: bad substitution もちろんecho $KSH_VERSION正常に動作するように見えます-クラッシュしないことを意味します-これらのマシンでは空白です。また、私は見たどこかKSH_VERSIONのみで設定されているがpdksh。 質問: kshプログラムでバージョンを安全に確認するにはどうすればよいですか?ここでの目的のために、実際のバージョン番号が何であるかは気にしませんksh。それがの古いバージョンであるかどうかだけです。 で$KSH_VERSION十分に良いですか?空白の場合、ksh必然的に古いバージョンですか?他のフォーラムは正しいのkshですか? これを確認する方法はまったくありませんか?

4
すべての文字のディレクトリを再帰的に作成します
ディレクトリをからaまでラベル付けする必要があるような方法でディレクトリを作成したいと思いますz。これらの各ディレクトリ内に、サブディレクトリを作成してaa、abなどのラベルを付ける必要があります。 したがって、たとえば、ディレクトリのm場合、私のサブディレクトリにはma、mbupto というラベルが付けられmzます。

7
ベース(末尾のマイナス)ファイル名の最後の3文字を抽出する最短の方法
私は、ファイルのベース名(ベース名によって、私はパスなしで意味の最後の3つの文字にshスクリプト内の変数を設定しようとしていると接尾辞なし)。私はこれを行うことに成功しましたが、純粋に好奇心から、より短い単一のコマンドを使用できるかどうか疑問に思っています。もともと、私はでワンライナーを持っていましたawkが、それはかなり長かったです。現在、私はこの2行のスクリプトを持っています(完全なファイル名がにあると仮定$1): filebase=`basename "$1"` lastpart=`echo -n ${filebase%.*} | tail -c3` したがって、たとえば、「/ path / to / somefile.txt」は、「ile」で終わり$lastpartます。 どういうわけかbasename、ビットを組み合わせて接尾辞を単一のコマンドに取り除くtailことができますか?接尾辞は不明なので、のパラメーターとして使用することはできませんbasename。 主な目標は、実際にはできるだけ短くすることではなく、できるだけ一目で読めるようにすることです。このすべての実際のコンテキストは、スーパーユーザーに関するこの質問です。ここでは、かなり単純な答えを考えています。

3
バックグラウンドプロセスの信頼できるリターンコード
次のbashコードを想定してみましょう。 foo > logfile 2>&1 & foo_pid=$! while ps -p$foo_pid do ping -c 1 localhost done wait $foo_pid if [[ $? == 0 ]] then echo "foo success" fi $?の戻りコードではfooなく、の戻りコードが実際に含まれていると想定しても安全pingですか?その質問に対する答えが「あなたはそれを仮定することはできません」である場合。次に、このコードを変更して、$?常に戻りコードが含まれていることを確認するにはどうすればよいfooですか?

2
ディレクトリ内の重複を見つけて削除する
複数のimgファイルがあるディレクトリがあり、それらのいくつかは同一ですが、それらはすべて異なる名前を持っています。重複を削除する必要がありますが、bashスクリプトのみで外部ツールは必要ありません。私はLinuxの初心者です。md5合計を比較するためにネストされたforループを試し、結果に応じて削除しましたが、構文に何か問題があり、機能しません。何か助け? 私が試したのは... for i in directory_path; do sum1='find $i -type f -iname "*.jpg" -exec md5sum '{}' \;' for j in directory_path; do sum2='find $j -type f -iname "*.jpg" -exec md5sum '{}' \;' if test $sum1=$sum2 ; then rm $j ; fi done done 私は得る: test: too many arguments

2
仮想端末で実行されているかどうかを検出しますか?
私はしたい自動ログインにtty1ログインにしてから使用しvlock、それをロックします。 現在の端末は、コンソール、仮想端末(例えばある場合にはどうすればバッシュから検出することができますtty1)私は置くことができるように、vlockにラインを.bash_profile、それが経由でログインする場合にのみ実行していますかtty1?

4
プレフィックスまたはサフィックスを追加して、ローカルフォルダー内のファイルの名前を変更する
フォルダーに多くのファイルがあり、それらにプレフィックスまたはサフィックス(両方ではなく)を追加したい。ここで確認して、使用できることがわかりました for filename in *.jpg; do mv "$filename" "prefix_$filename"; done; で終わるすべてのファイルにプレフィックスを追加するには.jpg(およびを削除.jpgすると、現在のフォルダー内のすべてのファイルにプレフィックスが追加されます)。 しかし、私はできるようにしたい サフィックスを追加します(つまり、名前filename.extをに変更しますfilename.whatever.ext)。 プレフィックスまたはサフィックスが既に存在するかどうかを確認してからスキップし、 addprefix whatever *.extまたはなどの引数を受け入れるエイリアスを作成しますaddsufix whatever *.*

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.