こんにちは。必要なときのみシェル、ごくたまにシェルスクリプトを利用する程度なため、非常に初歩的なことだとは思うのですが、すっかりどつぼにはまってしまい、調べてもらちがあかないので、質問させてください。
cp コマンドで、特定の文字列を「含まない」ファイルすべてを指定してコピーするにはどうしたらいいでしょうか。
cpにオプションがなかなか見つからないので findと組み合わせようと思ったのですがこれでも思うようにいかず、苦闘の末find, grepを総動員してcp `find /dir * | grep -vl 'mojiretsu'` などとやってみましたが引数が多すぎると怒られて終わり(泣)。
よい方法をぜひご伝授ください。要するにコピーが目的ですので別のコマンドでもかまいません。
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
ファイル名じゃなくて、ファイルの内容に、mojiretsu が含まれないファイルをコピーするのですよね?
grep -vl は、「文字列を含まないファイル名を得る」とは違い、「文字列が含まれない行を持つファイル名を得る」なので使えません。それ以前にfindコマンドの使い方がおかしいですが。
for i in /dir/*
do grep mojiretsu $i >/dev/null || cp $i /to-dir
done
のように対象を1ファイルずつチェックするか、
ls -1 /dir/* > /tmp/1
grep -l mojiretsu /dir/* > /tmp/2
cp `comm -23 /tmp/1 /tmp/2` /to-dir
のように全ファイル名の一覧と、文字列を含むファイル名の一覧の差分をとるか。
もし内容でなくファイル名の話だったら#2さんので良いと思います。
この回答への補足
ご指摘ありがとうとうございます。内容でなくファイル名の話ですが、参考になりました。ちょっといま試す時間が取れないので2,3日後にやってみます。とりあえずお礼まで
補足日時:2005/05/16 22:39No.2
- 回答日時:
修正です。
No.1のままだとディレクトリもコピーされるので普通のファイル(レギュラーファイル)のみコピー対象に変えます。
No.1を以下のように読み替えてください。
-------8<-------
% find srcdir ! -name '*mojiretsu*' | xargs -I'%' cp % distdir
↓
% find srcdir ! -name '*mojiretsu*' -type f | xargs -I'%' cp % distdir
-------8<-------
-------8<-------
% find srcdir ! -name '*mojiretsu*' | cpio -pdv distdir
↓
% find srcdir ! -name '*mojiretsu*' -type f | cpio -pdv distdir
-------8<-------
-------8<-------
% find srcdir ! -name '*mojiretsu*'
↓
% find srcdir ! -name '*mojiretsu*' -type f
-------8<-------
この回答への補足
ありがとうございます。やはり単にオプションで解決できる問題ではなかったようですね。上記、恥ずかしながら知らないコマンドがありますので勉強して試してみます。あさってくらいになると思うのでとりあえずお礼まで
補足日時:2005/05/16 22:23No.1
- 回答日時:
あるディレクトリ(srcdir)からある文字列(mojiretsu)がファイル名に含まないファイル全てをあるディレクトリ(distdir)にコピーする場合
% find srcdir ! -name '*mojiretsu*' | xargs -I'%' cp % distdir
ではどうでしょうか?
ただ、これはコピー先ディレクトリ配下1箇所に集める事になります。
ちなみにディレクトリ構成を保持しつつあるディレクトリ配下にコピーしたい場合には、
% find srcdir ! -name '*mojiretsu*' | cpio -pdv distdir
とかになります。
一応、
% find srcdir ! -name '*mojiretsu*'
の出力結果が希望しているファイルのみ表示されるか確認して、それで大丈夫なら実際にコピーを試してみて下さい。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
拡張子.dどういう意味
-
FTPコマンドのCDについて
-
"cp -a"と"cp -r"の違い
-
ftpのmgetコマンドの自分の格納...
-
ftpでのフォルダごとの転送はで...
-
linuxコマンド mkdirでディレ...
-
FTPで上書きできない
-
make時に出てきたエラーメッセ...
-
ファイル名で / (スラッシュ...
-
ホームページのディレクトリを...
-
.htaccessで時間制限したい
-
7zを使うとフォルダの中身がす...
-
「ドット(.)」と「¥」の意味...
-
バッチファルの置き場所
-
unzipコマンドでディレクトリな...
-
scpによるデータ転送後、ディレ...
-
FTPでPUTできない原因は何?
-
unix コマンドの ls -a につい...
-
エクセルでハイパーリンクを連...
-
フォルダにアクセスするとファ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
拡張子.dどういう意味
-
7zを使うとフォルダの中身がす...
-
ftpのmgetコマンドの自分の格納...
-
ホームページのディレクトリを...
-
ファイル名で / (スラッシュ...
-
FTPコマンドのCDについて
-
make時に出てきたエラーメッセ...
-
「照合パターンに合いません」...
-
/(スラッシュ)で区切ったフル...
-
linuxコマンド mkdirでディレ...
-
tarコマンドのエラーについて
-
"cp -a"と"cp -r"の違い
-
Linuxコマンドについて
-
「ドット(.)」と「¥」の意味...
-
scpによるデータ転送後、ディレ...
-
バッチファルの置き場所
-
FTPでPUTできない原因は何?
-
#./configureの時点でダメです。
-
エクセルでハイパーリンクを連...
-
SAMBA上に書き込んだファイルの...
おすすめ情報