シェルスクリプトでディレクトリ移動とコピーを自動化する方法

このQ&Aのポイント
  • シェルスクリプトを使用して、指定したディレクトリ内の複数のフォルダを別の場所に移動する方法について教えてください。
  • また、特定のフォルダが存在しない場合は移動しないようにスクリプトを作成したいです。
  • 自動化するための参考サイトや手順も教えていただけると助かります。
回答を見る
  • ベストアンサー

シェルスクリプトの書き方

お忙しい所失礼します。 以下の内容のようなことを行うにはどうすればいいでしょうか? (例) /home/testフォルダ直下に以下の3つのフォルダがあります。 ・sampleフォルダ ・sample1111フォルダ ・sample2222フォルダ このファイルをそれぞれ別のディレクトリに移動させます。 ・sampleフォルダ→/usr/testフォルダに移動 ・sample1111フォルダ→/usr/test1111フォルダに移動 ・sample2222フォルダ→/usr/test2222フォルダに移動 これが通常なのですが、sample1111と2222が無いときはコピーを実行しないスクリプトを書きたいのですがどう書けばいいのでしょうか? 手動でやる分には楽なんですけど、100個位フォルダがあり…日によって50の時もあれば100の時もあって…自動化したいのです… もし参考になるサイトなどあれば教えてください。 よろしくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
noname#208507
noname#208507
回答No.3

(他の方も言われているように)どうされたいのかイマイチよく分からないのですが、下のシェルスクリプトを実行したら希望した通りになりますか? #!/bin/sh SRC=/home/test DST=/usr for s in $SRC/* do if [ -d $s ] then t=`basename $s` t=$DST/test${t#sample} echo "cp -r $s $t" cp -r $s $t fi done

参考URL:
http://itpro.nikkeibp.co.jp/article/COLUMN/20060228/231019/
satsusatsu1202
質問者

お礼

サンプルの構文までいただきありがとうございます。 参考URLなどもご教授いただき助かります。 私の文章が書き間違いだらけでわかりにくいため、お手数おかけしました。

その他の回答 (2)

  • notnot
  • ベストアンサー率47% (4848/10262)
回答No.2

>/home/testフォルダ直下に以下の3つのフォルダがあります。 ・・・ >このファイルをそれぞれ別のディレクトリに移動させます どのファイルでしょう?それとも、フォルダの書き間違い? >sample1111と2222が無いときはコピーを実行しないスクリプトを書きたいのですが 無ければコピーされないので、無いときの心配はしなくていいです。 コピーコマンドがエラーになるだけ。

satsusatsu1202
質問者

お礼

文言わかりにくくて失礼しました。書き間違いおおくて。貴重なご意見ありがとうございます。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

正確な要件が不明なのでなんともいえんのだけど.... どちらかというと「無いときはコピーを実行しない」ではなく「あるものだけコピーする」と考えた方がいいんじゃないかな. コピーなのか移動なのか知らんし, 例えば「移動先のディレクトリがあったらどうするのか」とか決めにゃならんことは多いだろうけど.

satsusatsu1202
質問者

補足

コピーか移動なのか文言まちがえてしまい申し訳ないです。 実際はコピーです…

関連するQ&A

  • シェルスクリプトについて

    シェルスクリプトの勉強中です。 シェルで特定のフォルダに移動するスクリプトを書いているのですが、以下のような場合どうかいていけばいいのでしょうか? [例] /home/hogeの下にフォルダが1つだけある場合 sample01フォルダ →無条件でそのフォルダに移動する /home/hogeの下にフォルダが複数ある場合 sample01フォルダ sample02フォルダ sample03フォルダ →自分で選択して任意のフォルダに移動する  sample02と打ち込めばそこに移動出来るようにしたいです。 hoge配下のフォルダ名が不規則で定まっていない為、 複数ある場合にだけ選択リスト的なものを表示させて、間違えないように 移動させたいなと考えてます。 いい案などありましたら、ご教授いただけますと助かります。 よろしくお願い致します。

  • 簡単なシェルスクリプトを見てください。

    次のようなシェルスクリプトを作成しました。 #!/bin/sh echo [$1] awk '/"0312345678"/ {print}' /test > /test1 awk '/$1/ {print}' /test > /test2 のように簡単なスクリプトです。 $ sample \"0312345678\" で実行させたら、echo では"0312345678"に出力されます。 しかし、test1にはちゃんと結果が入っていますが、test2は空のファイルです。 なぜ、結果が違うのですか? 実行時、引数を渡す方法で、test1と同じ結果を得たければ、どうすればいいのですか?

  • シェルスクリプト

    はじめまして。 当方も現在調べてはいるのですが、難航していますので、ご質問させて下さい。 OS redhat es 3 DB DB2 8.1 【やりたい事】 手動でDBのアーカイブログを削除するのが大変ですので、自動で削除するスクリプトを作りたい。 【不明な点】 アーカイブログの保管場所の変更を考慮して、スクリプト上でコマンドを使用しログパスを確認しつつ、アーカイブログを削除したいのですが、スクリプトの記述の仕方に一部不明点があります。 下記 get db cfg for sample | grep LOG を実行 Path to log files = /home/test1/test1/NODE0000/SQL00001/SQLOGDIR/ (例えば)が帰ってくる。 この/home/test1/test1/NODE0000/SQL00001/SQLOGDIR/  がインスタンスによっては近い将来変動してきそうです。ですが、スクリプトのメンテまで行うとなると、結局手動削除とあまり手間は変わりそうにないので、ログの格納先が変わっても自動でパスを拾ってきて、削除するように作りたいのです。 当方も知識不足に加え、現在少々錯綜している状況で旨く質問できずに恐縮です。 たとえ話、逆に質問したいと言う形でも結構ですので、知恵を貸して頂けまないでしょうか? 宜しくお願いします。

  • シェルスクリプトからPHP実行

    シェルスクリプト(bash)内で、以下のようにPHPを呼んだ場合、 その次の処理がPHPの終了を待たずに実行されるようなのですが、 どうしてでしょうか? #!\bin\bash /usr/local/php4/bin/php /home/test.php echo "test!" 以上 なぜか test! という表示がPHPの処理中に出るように思えます。

  • シェルスクリプト勉強をしています。

    シェルスクリプト勉強をしています。 シェルスクリプトの条件で指定のディレクトリがAAAというディレクトリが1つしかない場合はスクリプト1を実行し終了させる。 AAAAというディレクトリも含めて複数ある場合(BBBというディレクトリのみでも同様)は別のスクリプト2を実行させる。 例として /home/hoge配下にTargetというディレクトリのみの場合は、スクリプトXを実行した後に終了させる。 Targetディクトリや他のディレクトリもある場合はスクリプトYを実行する。 Targetディレクトリ以外のディレクトリのみだけの場合もスクリプトYを実行する。 Targetディレクトリのみの場合というスクリプトの書き方がわからず… どなたか教えていただけると助かります。 よろしくお願いします

  • Linuxでシェルスクリプトがフルパスだと実行できない

    Linuxでシェルスクリプトがフルパスだと実行できない こんにちは 現在linuxでシェルスクリプトを記載していて、やっと出来た!と思ったら、なぜかフルパスで実行すると失敗します。 中身は例えば #!bin/sh echo "hello" とし、ファイル名をtest.shとします。 実行時にカレントからだと上手くいきます。 ./test.sh ただし、フルパスで実行するとうまくいきません。 ./home/user/test.sh エラーは以下 bash: ./home/dv3/tet.sh:No such file or directory 所有者はrootでグループもrootにしてあります。 シェルの権限は755にして、rootで実行しています。 なぜカレントだと上手くいき、フルパスだと上手くいかないのでしょうか? パスが必要なコマンドも入っていないのに。。。 どなたかご教授いただけると幸いです。 宜しくお願い致します。

  • 【初心者】シェルスクリプトの引数に関して

    現在、シェルスクリプトを作成しようと奮闘中です。 そこで引数に関してお伺いさせてください。 以下が実施したい内容になります。 (1)./test.sh ⇒引数を指定していないため、「引数を指定してください。」と出力し処理終了 (2)./test.sh daily⇒引数で指定した[daily]の処理を実行 (3)./test.sh weekly⇒引数で指定した[weekly]の処理を実行 (1)~(3)の条件を含んだシェルスクリプトを作成するには、 どのような実行処理が必要かご教授お願いします。 ※処理内容に関しては特に指定はございません。 例: daily=特定ディレクトリのコピー weekly=dailyで処理したディレクトリをtarで圧縮し別のディレクトリへ移動 など分かりやすい内容だと幸いです。 また、情報に不備などがありましたらご指摘おねがいします。

  • シェルスクリプト初心者です、以下のシェルを見てくだ

    お世話になります。 CentOS5にて、ディレクトリ「/home/user」からリモートホスト「192.168.11.200」の「/home/user」へ sshの鍵方式を使い、SCPで画像のコピーを行うシェルスクリプトを書きました。 以下のシェルスクリプトを書いたのですが、3行目の「/usr/bin/scp」が引っかかって 「/home/user/move_img.sh: line 3: `/usr/bin/scp -P 22 -i "/home/user/.ssh/id_rsa" -r ${FILE} user@192.168.11.200:${FILE};'」 とのエラーが出てしまいます。 素人のくせにシェルなんて書くなと言われればそれまでですが、 一体どの記述が悪いのか見当がつきません。 ご教授をお願いいたします。 ------ #!/bin/sh for FILE in `find /home/user -regex ".*\.\(jpg\|png\|gif\|JPG\|GIF\|PNG\)"`; /usr/bin/scp -P 22 -i "/home/user/.ssh/id_rsa" -r ${FILE} user@192.168.11.200:${FILE}; done ------

  • シェルスクリプト内の「exit」

    クライアントからteratermでservAに接続します。 そこからservBに接続します。 $ ssh servB サーバーBに個人のディレクトリがあり、そこにシェルスクリプトを作っています。 そのシェルスクリプトは「exit 0」で終わっています。 これを実行すると、サーバーBからログアウトしてしまいます。 exitはシェルスクリプト内で使うと、シェルスクリプトを終了するだけかと思ったのですが、ログアウトもしてしまうものなのでしょうか? exitを書かなければ、ログアウトすることなく、カレントディレクトリは変わらないままです。 実行するたびに $ ssh servB $ cd work/mydir と実行しないと自分のディレクトリに戻ってこれないので不便です。 色々と調べたのですが、なぜログアウトしてしまうのかわかりません。 どうすれば、ログアウトしないのか教えて下さい。 よろしくお願いいたします。 シェルスクリプト(TEST) #!/bin/bash -xv echo hello! exit 0 実行結果 [company@servB mydir]$ . TEST hello! Connection to servB closed. [company@servA ~]$

  • sudoでシェルスクリプトを実行させたい

    /usr/bin/sudo を使って、xxx.shを実行させたいので、設定でxxx.shを許可しました。 その後Apacheで動くCGI(perlスクリプト)から、``を使って実行させようと考えています。 このときにこのxxx.shがうまく動きません。多分シェルにアクセスできないのだと思いますが、どうしたらこのスクリプトをroot権限で動かす事ができるようになるのでしょうか。関係あるかどうかわかりませんが、xxx.shの中身はディレクトリ作成コマンドなどです。ネットで検索したら、シェルスクリプトだけ許可にすればよいとあったのですが・・。セキュリティ的には/bin/shを許可するのはまずそうな気がするのですが、こちらを許可してもよいものでしょうか。 環境等 xxx.sh 755 所有者(user1) Apache実行ユーザ (apache) CGIの実行ユーザ(apache?) 挑戦したコマンド(とアパッチのログ) `/usr/bin/sudo sh ./xxx.sh`; ->パスワード求められます (/bin/shの権限がない?) `/usr/bin/sudo ./xxx.sh`; ->/usr/bin/sudo: unable to exec ファイルのパス No such file or directory (xxx.shのファイルの場所はあってます) `/usr/bin/sudo フルパス/xxx.sh`; ->/usr/bin/sudo: unable to exec ファイルのパス No such file or directory (xxx.shのファイルの場所はあってます) 不足の点などあればご指摘ください。