ファイルとディレクトリを含むフォルダーA
があります。B
、file2
、file
、およびdirectory2
以外のすべてのファイルとディレクトリを別のフォルダーdirectory
に移動します。
これはどのように行うことができますか?
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)
私がいつもしていること
cd A
ls > a
(「a」ファイルがないと仮定します)。
vi a
保持するファイルまたはディレクトリを削除します。
mv $(<a) B
除外された式でfind
を使用できます。
find . ! -name . -Prune ! -path ./file \
! -path ./file2 \
! -path ./directory \
! -path ./directory2 \
-exec mv {} your_destination \;
このソリューションは この質問 に触発されています。
ls | egrep -v '(file|file2|directory|directory2)' | xargs -i mv {} ../B/
./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個の追加のクロスデバイスコピーが実行されます。
$ 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)
Bash配列を使用して、スキップするものを格納し、次にcontainsElement
関数のデモを使用できます here :
$ skiplist=(file file2 directory directory2)
$ for f in *; do if containsElement "$f" "${skiplist[@]}"; then continue; fi;
mv -v "$f" B; done