183

1つを除くすべてのファイルを移動するにはどうすればよいですか?私は次のようなものを探しています:

'mv ~/Linux/Old/!Tux.png ~/Linux/New/'

古いものを新しいものに移動します-を除くフォルダTux.png。!-記号は否定を表します。その仕事のための道具はありますか?

4

14 に答える 14

164

bash を使用し、extglobシェル オプションを設定している場合 (通常はこれが当てはまります):

mv ~/Linux/Old/!(Tux.png) ~/Linux/New/
于 2009-03-22T02:53:55.270 に答える
111

以下を .bashrc に追加します

shopt -s extglob

正規表現を拡張します。その後、1 つを除くすべてのファイルを次の方法で移動できます。

mv !(fileOne) ~/path/newFolder

他のコマンドに関する例外

ディレクトリのコピーでは、スレッドWhy extglob except breakexcept condition?で通知されているように、名前に forward-flash を使用できないことに注意してください。:

cp -r !(Backups.backupdb) /home/masi/Documents/

ここでは否定の前に間違ってBackups.backupdb/います。他のコマンドや他の例外でグロブを誤って使用するリスクがあるため、ディレクトリの移動にも使用しません。

于 2009-04-25T14:26:54.493 に答える
76

従来の find & xargs の方法を使用します。

find ~/Linux/Old -maxdepth 1 -mindepth 1 -not -name Tux.png -print0 | 
    xargs -0 mv -t ~/Linux/New

-maxdepth 1再帰的に検索しないようにします。ファイルだけに関心がある場合は、-type f. パス自体を結果に-mindepth 1含めないようにします。~/Linux/Old埋め込まれた改行を含むものを含む、任意のファイル名で動作します。

1 つのコメントは、 mv-tオプションがおそらく GNU 拡張であることに注意しています。それを持っていないシステムの場合

find ~/Linux/Old -maxdepth 1 -mindepth 1 -not -name Tux.png \
    -exec mv '{}' ~/Linux/New \;
于 2009-03-22T04:06:19.900 に答える
33

簡単な方法は、移動コマンドが一致しないように tux ファイル名を変更することです。

例えば:

mv Tux.png .Tux.png

mv * ~/somefolder

mv .Tux.png Tux.png
于 2009-03-22T02:52:37.520 に答える
17

bashの場合、sthの答えは正しいです。これがzsh(私の選択したシェル)の構文です:

mv ~/Linux/Old/^Tux.png ~/Linux/New/

EXTENDED_GLOBシェル オプションを設定する必要があります。

于 2009-03-22T03:00:27.717 に答える
15

これは、特定のファイルまたはディレクトリを除外する単純な移動については、少し安全で信頼しやすいと思います。

ls -1 | grep -v ^$EXCLUDE | xargs -I{} mv {} $TARGET
于 2011-04-29T01:01:45.510 に答える
6

次の方法は 100% 保証されているわけではなく、スクリプト作成には使用しないでください。しかし、インタラクティブなシェルをすばやく使用するのに十分な場合もあります。次のようなファイル ファイル グロブ

[abc]*

(a、b、または c で始まる名前を持つすべてのファイルに一致します) 最初に「^」文字を挿入することで否定できます。

[^abc]*

たとえば、次のように、「lost+found」ディレクトリと一致しないためにこれを使用することがあります。

mv /mnt/usbdisk/[^l]* /home/user/stuff/.

もちろん、l で始まる他のファイルがある場合は、後でそれらを処理する必要があります。

于 2009-03-29T00:40:33.223 に答える
4
mv `find Linux/Old '!' -type d | fgrep -v Tux.png` Linux/New

find コマンドはすべての通常のファイルを一覧表示し、fgrep コマンドは Tux.png を除外します。バッククォートは mv に、結果のファイル リストを移動するように指示します。

于 2009-03-22T02:55:17.997 に答える