GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana Memindahkan Semua File (termasuk Tersembunyi) Dari Satu Direktori Ke Yang Lain?

Bagaimana cara memindahkan semua file dalam direktori (termasuk yang tersembunyi) ke direktori lain?

Misalnya, jika saya memiliki folder "Foo" dengan file ".hidden" dan "notHidden" di dalamnya, bagaimana cara memindahkan kedua file ke direktori bernama "Bar"? Berikut ini tidak berfungsi, karena file “.hidden” tetap berada di “Foo”.

mv Foo/* Bar/

Cobalah sendiri.

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

Jawaban yang Diterima:

Zsh

mv Foo/*(DN) Bar/

atau

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

(Tinggalkan (N) jika Anda tahu direktori tersebut tidak kosong.)

Bash

shopt -s dotglob nullglob
mv Foo/* Bar/

Ksh93

Jika Anda tahu direktori tidak kosong:

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

Standar (POSIX) sh

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

Jika Anda bersedia untuk membiarkan mv perintah mengembalikan status kesalahan meskipun berhasil, jauh lebih sederhana:

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

GNU temukan dan GNU mv

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

Penemuan standar

Jika Anda tidak keberatan mengubah ke direktori sumber:

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

Berikut detail selengkapnya tentang mengontrol apakah file titik cocok di bash, ksh93, dan zsh.

Bash

Setel dotglob pilihan.

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

Ada juga GLOBIGNORE yang lebih fleksibel variabel, yang dapat Anda atur ke daftar pola wildcard yang dipisahkan titik dua untuk diabaikan. Jika tidak disetel (pengaturan default), shell berperilaku seolah-olah nilainya kosong jika dotglob diatur, dan seolah-olah nilainya adalah .* jika opsi tidak disetel. Lihat Perluasan Nama File di manual. Direktori pervasif . dan .. selalu dihilangkan, kecuali . dicocokkan secara eksplisit dengan pola.

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

Ksh93

Setel FIGNORE variabel. Jika tidak disetel (pengaturan default), shell berperilaku seolah-olah nilainya adalah .* . Untuk mengabaikan . dan .. , mereka harus dicocokkan secara eksplisit (manual di ksh 93s+ 2008-01-31 menyatakan bahwa . dan .. selalu diabaikan, tetapi ini tidak menggambarkan perilaku sebenarnya dengan benar).

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

Anda dapat menyertakan file titik dalam suatu pola dengan mencocokkannya secara eksplisit.

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

Agar ekspansi keluar kosong jika direktori kosong, gunakan N opsi pencocokan pola:~(N)@(*|.[^.]*|..?*) atau ~(N:*|.[^.]*|..?*) .

Zsh

Setel dot_glob pilihan.

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

. dan .. tidak pernah cocok, meskipun polanya cocok dengan . secara eksplisit.

% echo .*
..two .one

Anda dapat menyertakan file titik dalam pola tertentu dengan D kualifikasi glob.

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

Tambahkan N glob qualifier untuk membuat ekspansi keluar kosong di direktori kosong:*(DN) .

Catatan:Anda mungkin mendapatkan hasil perluasan nama file dalam urutan yang berbeda
(mis., none diikuti oleh .one diikuti oleh ..two )
berdasarkan setelan LC_COLLATE , LC_ALL , dan LANG variabel.

Terkait:Daftar kueri server untuk memori/cpu yang dialokasikan?
Linux
  1. Cara Menemukan dan Menyalin Jenis File Tertentu Dari Satu Direktori Ke Direktori Lain Di Linux

  2. Cara menyalin tabel dari satu database mysql ke database mysql lainnya

  3. Bagaimana mengubah semua kemunculan kata di semua file dalam direktori

  1. Bagaimana Cara Menyalin Pengaturan Dari Satu Mesin Ke Mesin Lainnya?

  2. Bagaimana Cara Memindahkan File Dari Satu Akun Pengguna Ke Akun Pengguna Lain Di Komputer Yang Sama?

  3. Bagaimana saya bisa mengubah semua file milik satu pengguna ke pengguna lain?

  1. Bagaimana Cara Memindahkan Semua File Sumber Java Ke Direktori Paket Masing-masing?

  2. Bagaimana Cara Memindahkan Satu Direktori ke Bawah?

  3. CentOS / RHEL :Cara memindahkan Grup Volume dari satu sistem ke sistem lainnya