
こんにちは。必要なときのみシェル、ごくたまにシェルスクリプトを利用する程度なため、非常に初歩的なことだとは思うのですが、すっかりどつぼにはまってしまい、調べてもらちがあかないので、質問させてください。
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で質問しましょう!
似たような質問が見つかりました
- UNIX・Linux Linuxについて質問です。 以下のような設定をしたMakefileを作成するにはどう記述すればよい 1 2023/02/03 20:10
- Visual Basic(VBA) エクセルの数式で教えてください。 1 2023/07/31 15:49
- Visual Basic(VBA) VBA初心者です 検索した数字の行に色をつける 5 2023/02/13 14:22
- pixiv 腐女子の方に質問です(できれば二次創作される方) 2 2022/06/20 04:47
- Visual Basic(VBA) 特定の文字を簡単な操作で半角スペースに変換するか削除したい 2 2022/11/01 10:35
- Visual Basic(VBA) Excel VBA キーワードから列を取得して、さらに空欄行を非表示にする 3 2022/10/21 22:49
- その他(プログラミング・Web制作) 2つのテキストファイルを比べて文字列を特定する方法を教えて下さい 5 2022/05/01 15:22
- Excel(エクセル) エクセルで#以降の文字を取得したい 1 2022/03/28 13:14
- Visual Basic(VBA) excelにて、特定の列に数字入力してあれば、入力してある行コピーして 別ファイルに張り付ける 2 2022/08/11 05:33
- UNIX・Linux bashでブランク(空白)を検索文字列として指定する方法 1 2022/04/13 22:29
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ftpのmgetコマンドの自分の格納...
-
7zを使うとフォルダの中身がす...
-
ファイル名で / (スラッシュ...
-
~/.profile を変更するにもみつ...
-
「照合パターンに合いません」...
-
"cp -a"と"cp -r"の違い
-
拡張子.dどういう意味
-
VBscriptでディレクトリ一覧フ...
-
FTPコマンドのCDについて
-
cygwinのlsコマンド反応が異常...
-
lha32 コマンドオプション
-
netra t1(105)にsolaris10をins...
-
make時に出てきたエラーメッセ...
-
ファイル共有(継承)について
-
コンパイルできない!
-
FTPで上書きできない
-
zorin os lite 15 のデスクトッ...
-
Windows NT 4.0 にExpand コマ...
-
初心者です、オーナー変更につ...
-
ホームページのディレクトリを...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ftpのmgetコマンドの自分の格納...
-
ファイル名で / (スラッシュ...
-
拡張子.dどういう意味
-
7zを使うとフォルダの中身がす...
-
Linuxコマンドについて
-
make時に出てきたエラーメッセ...
-
FTPでPUTできない原因は何?
-
"cp -a"と"cp -r"の違い
-
linuxコマンド mkdirでディレ...
-
FTPコマンドのCDについて
-
/(スラッシュ)で区切ったフル...
-
「照合パターンに合いません」...
-
zorin os lite 15 のデスクトッ...
-
scpによるデータ転送後、ディレ...
-
バッチファルの置き場所
-
ホームページのディレクトリを...
-
「ドット(.)」と「¥」の意味...
-
#./configureの時点でダメです。
-
ftpでのフォルダごとの転送はで...
-
LinuxでSGID設定する際、2775と...
おすすめ情報