GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie verschiebt man alle Dateien (einschließlich versteckter) von einem Verzeichnis in ein anderes?

Wie verschiebe ich alle Dateien in einem Verzeichnis (einschließlich der versteckten) in ein anderes Verzeichnis?

Wenn ich zum Beispiel einen Ordner „Foo“ mit den Dateien „.hidden“ und „notHidden“ darin habe, wie verschiebe ich dann beide Dateien in ein Verzeichnis namens „Bar“? Folgendes funktioniert nicht, da die „.hidden“-Datei in „Foo“ bleibt.

mv Foo/* Bar/

Probieren Sie es selbst aus.

mkdir Foo
mkdir Bar
touch Foo/.hidden
touch Foo/notHidden
mv Foo/* Bar/

Akzeptierte Antwort:

Schsch

mv Foo/*(DN) Bar/

oder

setopt -s glob_dots
mv Foo/*(N) Bar/

(Lassen Sie das (N) weg wenn Sie wissen, dass das Verzeichnis nicht leer ist.)

Bash

shopt -s dotglob nullglob
mv Foo/* Bar/

Ksh93

Wenn Sie wissen, dass das Verzeichnis nicht leer ist:

FIGNORE='.?(.)'
mv Foo/* Bar/

Standard (POSIX) sh

for x in Foo/* Foo/.[!.]* Foo/..?*; do
  if [ -e "$x" ]; then mv -- "$x" Bar/; fi
done

Wenn Sie bereit sind, den mv Befehl einen Fehlerstatus zurückgibt, obwohl er erfolgreich war, ist es viel einfacher:

mv Foo/* Foo/.[!.]* Foo/..?* Bar/

GNU find und GNU mv

find Foo/ -mindepth 1 -maxdepth 1 -exec mv -t Bar/ -- {} +

Standardsuche

Wenn es Ihnen nichts ausmacht, in das Quellverzeichnis zu wechseln:

cd Foo/ &&
find . -name . -o -exec sh -c 'mv -- "[email protected]" "$0"' ../Bar/ {} + -type d -prune

Hier finden Sie weitere Einzelheiten zur Steuerung, ob Punktdateien in bash, ksh93 und zsh abgeglichen werden.

Bash

Setzen Sie den dotglob Option.

$ echo *
none zero
$ shopt -s dotglob
$ echo *
..two .one none zero

Es gibt auch das flexiblere GLOBIGNORE -Variable, die Sie auf eine durch Doppelpunkte getrennte Liste von zu ignorierenden Platzhaltermustern setzen können. Wenn nicht gesetzt (Standardeinstellung), verhält sich die Shell so, als wäre der Wert leer, wenn dotglob gesetzt ist, und als ob der Wert .* wäre wenn die Option nicht gesetzt ist. Siehe Dateinamenerweiterung im Handbuch. Die allgegenwärtigen Verzeichnisse . und .. werden immer weggelassen, es sei denn, die . wird explizit durch das Muster abgeglichen.

$ GLOBIGNORE='n*'
$ echo *
..two .one zero
$ echo .*
..two .one
$ unset GLOBIGNORE
$ echo .*
. .. ..two .one
$ GLOBIGNORE=.:..
$ echo .*
..two .one

Ksh93

Stellen Sie FIGNORE ein Variable. Wenn nicht gesetzt (Standardeinstellung), verhält sich die Shell so, als wäre der Wert .* . . ignorieren und .. , müssen sie explizit abgeglichen werden (das Handbuch in ksh 93s+ 2008-01-31 besagt, dass . und .. werden immer ignoriert, aber das beschreibt das tatsächliche Verhalten nicht richtig).

$ echo *
none zero
$ FIGNORE='@(.|..)'
$ echo *
..two .one none zero
$ FIGNORE='n*'
$ echo *
. .. ..two .one zero

Sie können Punktdateien in ein Muster einbeziehen, indem Sie sie explizit abgleichen.

$ unset FIGNORE
$ echo @(*|.[^.]*|..?*)
..two .one none zero

Um die Erweiterung leer erscheinen zu lassen, wenn das Verzeichnis leer ist, verwenden Sie den N Mustervergleichsoption:~(N)@(*|.[^.]*|..?*) oder ~(N:*|.[^.]*|..?*) .

Schsch

Setzen Sie den dot_glob Option.

% echo *
none zero
% setopt dot_glob
% echo *
..two .one none zero

. und .. werden niemals abgeglichen, selbst wenn das Muster mit dem führenden . übereinstimmt explizit.

% echo .*
..two .one

Mit dem D können Sie Punktdateien in ein bestimmtes Muster einfügen Glob-Qualifizierer.

% echo *(D)
..two .one none zero

Fügen Sie das N hinzu Glob-Qualifizierer, um die Erweiterung in einem leeren Verzeichnis leer erscheinen zu lassen:*(DN) .

Hinweis:Möglicherweise erhalten Sie Ergebnisse der Dateinamenerweiterung in unterschiedlicher Reihenfolge
(z. B. none gefolgt von .one gefolgt von ..two )
basierend auf Ihren Einstellungen des LC_COLLATE , LC_ALL , und LANG Variablen.

Verwandt:Liste der Server nach zugewiesenem Arbeitsspeicher/CPU abfragen?
Linux
  1. CentOS / RHEL :So verschieben Sie eine Volumengruppe von einem System auf ein anderes

  2. Verschieben Sie alle Dateien bis auf eine

  3. Wie verschiebt (und überschreibt) man alle Dateien von einem Verzeichnis in ein anderes?

  4. So ändern Sie alle Vorkommen eines Wortes in allen Dateien in einem Verzeichnis

  5. Wie benenne ich mehrere Dateien von einer Erweiterung in eine andere in Linux / Unix um?

Wie kopiert man eine Datei aus einem anderen Verzeichnis in das aktuelle?

Wie bewegt man sich ein Verzeichnis nach unten?

Wie verschiebt man Konten von einem cPanel-Server auf einen anderen cPanel-Server?

So kopieren Sie eine Tabelle von einer MySQL-Datenbank in eine andere MySQL-Datenbank

Wie kopiert man die Top 10 der neuesten Dateien von einem Verzeichnis in ein anderes?

Wie kann ich alle Dateien eines Benutzers auf einen anderen Benutzer übertragen?