web-dev-qa-db-ja.com

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

私は疑問に思っています-特定のディレクトリ内のファイルを除くディレクトリ内のすべてのファイルを移動するにはどうすればよいですか(「mv」には「--exclude」オプションがないため)?

36
David Liu

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ディレクトリに移動します。

69

Findにはexcludeオプションがあるため、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よりも優れていると思います)。

3
Slartibartfast

これはまさにあなたが求めたものではありませんが、それは仕事をするかもしれません:

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を手に入れることができるかもしれません。

1
Thanatos

これにより、。/ exclude /ディレクトリにない現在のディレクトリ以下のすべてのファイルが/ wherever ...に移動します。

find -E . -not -type d -and -not -regex '\./exclude/.*' -exec echo mv {} /wherever \;
1
sjr
#!/bin/bash

touch Apple  banana  carrot  dog  cherry

mkdir fruit

F="Apple  banana  carrot  dog cherry"

mv ${F/dog/} fruit

#これにより、リストOFから「犬」が削除されるため、現在のディレクトリに残り、「フルーツ」に移動しません

0
Chris Reid
ls | grep -v exclude-dir | xargs -t -I '{}' mv {} exclude-dir
0
xyz