web-dev-qa-db-ja.com

Linuxコマンドライン。一部のファイルとディレクトリを除いて、ディレクトリ内のすべてのファイルとディレクトリを移動します

ファイルとディレクトリを含むフォルダーAがあります。Bfile2file、およびdirectory2以外のすべてのファイルとディレクトリを別のフォルダーdirectoryに移動します。

これはどのように行うことができますか?

7

zshの場合:

setopt extendedglob # best in ~/.zshrc
mv A/^(file|directory)(|2)(D) B/

(D)ドット(非表示)ファイルを含めます)。

bashの場合:

shopt -s extglob dotglob failglob
mv A/!(@(file|directory)?(2)) B/

ksh93

(FIGNORE='@(.|..|@(file|directory)?(2))'; mv A/* B)
10

私がいつもしていること

cd A
ls > a

(「a」ファイルがないと仮定します)。

vi a

保持するファイルまたはディレクトリを削除します。

mv $(<a) B
10
Archemar

除外された式でfindを使用できます。

find . ! -name . -Prune ! -path ./file \
                        ! -path ./file2 \
                        ! -path ./directory \
                        ! -path ./directory2 \
     -exec mv {} your_destination \;

このソリューションは この質問 に触発されています。

5
Falko
ls | egrep -v '(file|file2|directory|directory2)' | xargs -i mv {} ../B/
2
kevino_17

./A./Bが同じファイルシステムにある場合andこれらのファイルが./Bに存在しない場合:

file file2 directory directory2

...そして、この操作はアトミックでなければなりません:

cd ./A; mv * ../B
for mv in file file2 directory directory2
do mv ../B/"$mv" .
done

そうでない場合は、上記のコマンドセットで少なくとも 8個の追加のクロスデバイスコピーが実行されます。

1
mikeserv

$ Sudo mv(ソースフォルダー名)A B(宛先フォルダー名)

例:空のディレクトリをいくつかのサブフォルダーに作成a 1)Sudo mkdir -p A/{b/{a、b、c}、c、d}

2)ls A /

b c d

3)Sudo mkdir B

5)sudo mv a(folder) b(folder)

0
dhamu

Bash配列を使用して、スキップするものを格納し、次にcontainsElement関数のデモを使用できます here

$ skiplist=(file file2 directory directory2)
$ for f in *; do if containsElement "$f" "${skiplist[@]}"; then continue; fi;
mv -v "$f" B; done
0
Brandin