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