プロが教える店舗&オフィスのセキュリティ対策術

Linux初心者です。ワイルドカードの使い方について教えてください。

==============================================
あるディレクトリ内に多数のファイルがあって、
特定の1つ(もしくは2つ)のファイル以外を全て
mvコマンドで移動させたいのですが、
特定ファイル名を"除外"する方法が分かりません。
==============================================

>ls
a1 a2 a3 a4 b1 b2 b3 b4

例えば、a1,a2,a3,a4,b1,b2,b3,b4
という8個のファイルがある場合、
a1とb2以外の6個を選択して移動させたいのですが、
ワイルドカード等で簡単に選択する方法はないものでしょうか?


自分で思いつく限りでは、$send_dirを移動先として
(1)mv * {$send_dir}
(2)mv $send_dir/{a1,b2} ./
のような2つのコマンドを新しいコマンド(例えば"mv2")に割り当てて、
> mv2 {a1,b2}
のように指定すれば、それ以外が移動される、
というようにできるのかな?と思ったのですが、
このやり方も見当違いだったりしますでしょうか?

OSはCentOS5.5で、シェルはtcshです。
よろしくお願いします。

A 回答 (3件)

tcshですか。

bashなら
cd 送り元dir
ls -1 |grep -v a1|grep -v b2|while read line
do
mv ${line} 送り先dir
done

ですかね。但し、*a1*と*b2*も対象外になってしまいますけど。
    • good
    • 0

#1さんの方法で、grep の-wオプションを使うことで a1,b1だけに限定することができそうに思います。


これと、xargsを-iオプション付きで使うと、シンプルにできるかもしれません。

例えば、
ls | grep -v -w a1 | grep -v -w b2 | xargs -i mv {} dist-dir/
みたいな感じでできるかもしれません。
    • good
    • 0

tcsh にはなさそう.


bash かつ extglob が設定されていれば方法はある.
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!