Ligne de command Linux. Déplacer tous les files et directorys dans le directory, sauf certains files et directorys

J'ai un dossier A qui a des files et des directorys, je veux déplacer tous ces files et directorys vers un autre dossier B , sauf le file , le file2 , le directory et le directory2 .

Comment cela peut-il être fait?

Avec zsh :

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

(le (D) pour inclure des files point (cachés)).

Avec bash :

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

Avec ksh93

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

ce que je fais habituellement

 cd A ls > a 

(en supposant que vous n'avez pas de file 'a').

 vi a 

supprimer le file ou le directory à conserver en place.

 mv $(<a) B 

Vous pouvez utiliser la find avec des expressions exclues:

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

Cette solution est inspirée par cette question .

Si ./A et ./B sont sur le même système de files et si ces files n'existent pas déjà dans ./B :

 file file2 directory directory2 

… alors cette opération devrait être atomique:

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

Si ce n'est pas le cas, il y a au less 8 copys croisées supplémentaires avec l'set de commands ci-dessus.

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

$ sudo mv (nom du dossier source) AB (nom du dossier de destination)

ex: créer un directory vide sous-dossier a 1) sudo mkdir -p A / {b / {a, b, c}, c, d}

2) ls A /

bcd

3) sudo mkdir B

5) sudo mv a (dossier) b (dossier)

Vous pouvez utiliser un tableau bash pour stocker ceux que vous voulez ignorer, puis utiliser la fonction containsElement affichée ici :

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