便利なシェルスクリプト見せろ

このエントリーをはてなブックマークに追加
AIX 5.1のmvコマンドに-bや-Sのオプションはない。-fと-iだけ。
いったいどこで使っているんだ?
ここにUNIX系OSのmanがドーンと集まってるから片っ端から猿クリックしてみては?
ttp://www.freebsd.org/cgi/man.cgi?query=mv&apropos=0&sektion=1&format=html
激スマソ、俺はいま見てる暇ない。
GNUのfileutilだな。
mvするときにtarをつかうやつ教えてクレ。
同名でも上書きできるやつ。
オプションが難しくて忘れた。 orz
>>885
なにそれ?
>>885
% cd $SOURCEDIR
しておいて、
% tar -cf - . | (cd $DESTINATIONDIR; tar -xf -)
とかのはなしし?

# ちなみに、モダンなtarやGNU tarだったら、cdやらの付属部分も
# tarのオプションに組み込むことできるはず。
先輩!
tar -xfじゃなくtar -xpfとしてパーミッションやらモードやらを
preserveすることも多いッス!
mv で同名のファイルがあったとき,
上書きするかどうか聞く前に,
両者の ls -l を表示して欲しい.
ディレクトリを上書きする場合は,
サブデイレクトリ全部上書きして欲しい.
>>887
最初それかなーとか思ったけど mv しないしなーとか思って書くのやめた。
>>890
--remove-files
タイムスタンプ、パーミッション、
特別なファイルやハードリンク、シムリンクを
すべて保存してコピーしたい場合は、何を使うべき?
cp -a か
>>887 のやつか
cpio か。
#!/usr/local/bin/perl5.6.1
#FreeBSDで使うこと。/etc/skelにユーザのテンプレートを用意しておくとして、
#userというグループでアカウントを作成する。
#1行がmailaddr,passwordで構成されるcsvファイル(例adduser.txt)を置き、
#suでrootになってから
# cat adduser.txt | perl add.pl でadd.plに読み込ませると
#ユーザーを生成する。
#パスワードに '#' とか入る場合は、\#で。


while($read=<>){
$read =~ s/\n//g;
$read =~ s/\r//g;
($id,$pass)=split /,/,$read;
print "id:$id\n";
print "ps:$pass\n";
system("echo $pass | pw useradd $id -g user -s /bin/tcsh -m -k /etc/skel -h fd");
}
exit;
[RedHatで同様のことをやる場合]
FreeBSDのpwコマンドがないので、楽にはいかないですな。
#!/usr/bin/perl
sub make_salt { # salt の生成
my $tmp;
my $salt = "";
srand(); # rand の初期化
for (my $i = 0; $i < 2; $i++) {
$tmp = int(rand(63));
if ($tmp < 12) { # ./0-9
$salt = $salt . chr($tmp + 46);
} elsif ($tmp < 38) { # A-Z
$salt = $salt . chr($tmp + 65 - 12);
} elsif ($tmp < 64) { # a-z
$salt = $salt . chr($tmp + 97 - 38)
} else { # error
return ("");
}
}
return ($salt);
}

while($read=<>){
$read =~ s/\n//g;
$read =~ s/\r//g;
($id,$pass)=split /,/,$read;
$crypt_pswd = crypt($pass,&make_salt);
print "id:$id\n";
print "ps:$pass\n";
system(" /usr/sbin/useradd -d /home/$id -p $crypt_pswd $id");
}
>>887
俺は逆に、
% cd $DESTDIR
% (cd $SRCDIR ; tar cf - .) | tar xf -
ってやってるな。$DESTDIRを書き間違えたら怖いから。
どっちも使うなー。

% cd $SRCDIR
% tar cf - . | ssh remotehost "cd $DESTDIR; tar xf -"

% cd $DESTDIR
% ssh remotehost "cd $SRCDIR; tar cf - ." | tar xf -
綺麗にスルーされる>>893,894
だってさ〜、ちょっと見ればさ、こりゃスルーした方がいいと思えるっしょ。
ufsdump 0f - /hoge|rsh rhost "cd /fuga;ufsrestore rf -"
なるほど、受け取る前にcdできるんだな。
>>896
それ初めて覚えたときは感動したなあ。
cdしてからtarする場合は、; を使うんじゃなくて、&& にするか、-C 使え


と、うちのじっちゃんが言ってました
なんで?
cd に失敗すると、あらぬ場所でtar -xが実行されちゃうからでしょ。
>>530
man morse
なんなら、
tar cf - . | (cd /notexist; tar xf -)
してみ
ちょっと大きめのファイルをダミーで作って試せば、
tarのバージョンによってはおそろしさがわかるかも
906名無しさん@お腹いっぱい。:04/11/25 09:49:40
第1引数としてファイル名,第2引数として正整数をとって,
そのファイルを 1, 2, 3, … ,n というような複製を作るような
シェルスクリプトをおながいします.
seq 1 $2 | while read d; do
cp "$1" "$1.$d"
done
宿題は自分で
909名無しさん@お腹いっぱい。:04/11/25 10:00:00
>>907

ありがとうございます
シェルスクリプトは魔術のようですね
理解できない技術は魔法に見えるってやつだな
たまにシェルスクリプトにでる(hoge)とかの
括弧が理解できないんだけど
サルにも理解できるように説明してくれ
()の中はsubshell環境で実行される。
(())の中はarithmetic evaluationされる。
seqなんてはじめてみたな。
ってLinux(gnu)のコマンドだし。
BSD使いだが、GNU coreutilsマンセー
>>914
禿同
マカが「seqないよー」というのを何度聞いたことか。
かくいうわたしもMacユーザー。

で、コピーはとりあえずrsync
jotはあるか
918名無しさん@お腹いっぱい。:04/11/27 00:06:08
すいません。ちょっと質問あるのですが・・・

文字列(たとえば22:30:30)などといったものを、時刻型変数
として扱うようにできるコマンドってありますか?

22:30:30という時刻から1を引いて、22:30:29というような
動作を試したいんですが・・・
自分、シェルは初心者なんでわからないんです。
一応調べましたが、わかりませんでした。

わかる方おられましたら、すいませんがご教授お願いします。

すいませんが、


新しめのdateでがちゃがちゃやればできそうな気もするが、
どこにでもあるとは限らんから、
時分秒を秒に変換する関数と、秒を時分秒に変換する関数を書いて、
内部は秒にしとくのが楽じゃない?
と思ったが、いちおう俺の環境ではできたので、書いとく
date -j -v-1S -f "%H:%M:%S" 22:30:30 "+%H:%M:%S"
2byte文字からの変換が面倒だな
922名無しさん@お腹いっぱい。:04/11/27 02:28:54
宿題を手伝ってくれるスレはここですか?

そういえば会社の Solaris の emacs で
C-u M-! seq 256
したかっただけなのに seq が無くて
結局 seq もどきを適当に自分で書いた

デバッグとか含めると
1 から 256 まで一つずつ書いていく方が早かったかも知れない

でも一回作るとやっぱり便利だね

date -j -v-1S -f "%H:%M:%S" `echo 22:30:30|nkf -Z` "+%H:%M:%S"
また 2byte文字に戻さなきゃ
表示もISO 8601形式で統一としけ。
M-: (eval-expression) しる!

emacs のときはできますが,シェルスクリプトで seq が使えないとマンドクサ
>>927>>923へのコメント?

emacs で使えるのにシェルスクリプトで使えない seq って何?
せっくす
このスレ的には、seqを使わない解を出すべきだろ。
yes "" | cat -n | head -10