GNU/Linux >> Linux の 問題 >  >> Linux

「mv」コマンドを使用して、特定のディレクトリ以外のファイルを移動する方法は?

find には除外オプションがあるため、find + xargs + mv を使用します:

find /source/directory -name ignore-directory-name -prune -print0 | xargs -0 mv --target-directory=/target/directory

これはほぼ find の man ページからコピーされたものであることに注意してください (mv --target-directory を使用する方が cpio よりも優れていると思います)。


dir 構造が次のようなものであると仮定しましょう。

|parent
    |--child1
    |--child2
    |--grandChild1
    |--grandChild2
    |--grandChild3
    |--grandChild4
    |--grandChild5
    |--grandChild6

そして、次のように見えるようにファイルを移動する必要があります。

|parent
    |--child1
    |   |--grandChild1
    |   |--grandChild2
    |   |--grandChild3
    |   |--grandChild4
    |   |--grandChild5
    |   |--grandChild6
    |--child2

この場合、2 つのディレクトリ child1 を除外する必要があります。 そして child2 、残りのディレクトリを child1 に移動します ディレクトリ。

使用、

mv !(child1|child2) child1

これにより、残りのすべてのディレクトリが child1 に移動されます ディレクトリ。


これはまさにあなたが求めていたものではありませんが、うまくいくかもしれません:

mv the-folder-you-want-to-exclude somewhere-outside-of-the-main-tree
mv the-tree where-you-want-it
mv the-excluded-folder original-location

(基本的に、除外されたフォルダーを、移動する大きなツリーの外に移動します。)

a/ がある場合 a/b/c/* を除外したい :

mv a/b/c ../c
mv a final_destination
mkdir -p a/b
mv ../c a/b/c

またはそのようなもの。そうしないと、find を取得できる可能性があります


最初にファイルとフォルダの名前を取得し、必要なものを除外します:

ls --ignore=file1 --ignore==folder1 --ignore==regular-expression1 ...

次に、フィルタリングされた名前を mv に渡します 最初のパラメーターと 2 番目のパラメーターが宛先になるため:

mv $(ls --ignore=file1 --ignore==folder1 --ignore==regular-expression1 ...) destination/

Linux
  1. ディレクトリとサブディレクトリ内のファイル数を見つける方法

  2. Linuxでmoveコマンドを使用する5つの方法

  3. Linux で rpm2cpio コマンドを使用する方法

  1. Linuxで特定のディレクトリまたは別のディレクトリにtarファイルを抽出する方法

  2. Grepコマンドを使用してファイル内のテキストを検索する方法

  3. Inotifywaitを使用して、特定の拡張子のファイルを作成するためのディレクトリを監視する方法は?

  1. 拡張子に基づいて特定のファイルを移動する方法は?

  2. Linux の find コマンドを使用してファイルを検索する方法

  3. 「cp」コマンドを使用して特定のディレクトリを除外する方法は?