Karena find memiliki opsi kecualikan, gunakan find + xargs + mv:
find /source/directory -name ignore-directory-name -prune -print0 | xargs -0 mv --target-directory=/target/directory
Perhatikan bahwa ini hampir disalin dari halaman manual find (menurut saya menggunakan mv --target-directory lebih baik daripada cpio).
Mari kita asumsikan struktur dirnya seperti,
|parent
|--child1
|--child2
|--grandChild1
|--grandChild2
|--grandChild3
|--grandChild4
|--grandChild5
|--grandChild6
Dan kita perlu memindahkan file agar terlihat seperti,
|parent
|--child1
| |--grandChild1
| |--grandChild2
| |--grandChild3
| |--grandChild4
| |--grandChild5
| |--grandChild6
|--child2
Dalam hal ini, Anda perlu mengecualikan dua direktori child1
dan child2
, dan pindahkan direktori lainnya ke child1
direktori.
gunakan,
mv !(child1|child2) child1
Ini akan memindahkan semua direktori lainnya ke child1
direktori.
Ini bukan yang Anda minta, tetapi mungkin berhasil:
mv the-folder-you-want-to-exclude somewhere-outside-of-the-main-tree
mv the-tree where-you-want-it
mv the-excluded-folder original-location
(Pada dasarnya, pindahkan folder yang dikecualikan dari pohon yang lebih besar untuk dipindahkan.)
Jadi, jika saya memiliki a/
dan saya ingin mengecualikan a/b/c/*
:
mv a/b/c ../c
mv a final_destination
mkdir -p a/b
mv ../c a/b/c
Atau semacam itu. Jika tidak, Anda mungkin bisa mendapatkan find
untuk membantu Anda.
Pertama-tama dapatkan nama file dan folder dan kecualikan mana saja yang Anda inginkan:
ls --ignore=file1 --ignore==folder1 --ignore==regular-expression1 ...
Kemudian berikan nama yang difilter ke mv
sebagai parameter pertama dan parameter kedua akan menjadi tujuan:
mv $(ls --ignore=file1 --ignore==folder1 --ignore==regular-expression1 ...) destination/