Jadi saya punya repo dengan beberapa file konfigurasi saya dan saya mencoba membuat makefile
untuk menginstalnya di homedir. Masalah yang saya miliki adalah ketika saya menjalankan perintah berikut langsung dalam bash
install -m 755 -d ~/path/to/dotfilesDir/ ~/
sepertinya tidak ada yang terjadi sementara
install -m 755 ~/path/to/dotfilesDir/{file1,file2,...} ~/
berfungsi sebagaimana dimaksud.
Mengapa solusi pertama (lebih mudah dan lebih bersih) tidak berfungsi?
Jawaban:
Dari melihat halaman manual , tampaknya itu
install
tidak akan melakukan apa yang Anda inginkan.Memang, bagian Sinopsis menunjukkan penggunaan formulir:
dan kemudian, halaman manual mengatakan:
Jadi menurut saya poin dari opsi ini adalah untuk dapat menginstal struktur direktori yang rumit (tapi kosong) à la
mkdir -p ...
.Anda dapat mencapai apa yang Anda inginkan dengan satu lingkaran:
Atau, jika ada banyak level di bawah
/path/to/DotFiles/dir
, Anda dapat menggunakanfind
:sumber
install -m 755 -d ~/foo/bar/baz
-exec 'install -m 755 "{}" ~/' +
tidak akan bekerja, setidaknya tidak pada versi linux tertentu (semua? sebagian?). Dapat bekerja pada OSX atau sesuatu. Menggunakan sesuatu seperti ini cukup mudah jika Anda menginginkan oneliner: 1. membuat direktori rekursif:for d in $(find . -type d); do install -d --mode 755 "$d" "../install-test/$d"; done
2. membuat file rekursif:for f in $(find . -type f); do install -D --mode 644 "$f" ../install-test/; done
Mulai dari jawaban @Joseph R., ini adalah solusi saya untuk membuatnya bekerja dengan find, karena saya tidak bisa membuat perintahnya berfungsi. (Saya rasa tidak, karena aturan yang berlaku untuk
\+
: tidak ada apa-apa setelah{}
elemen.) (Saya tidak bisa berkomentar. Seluruh paragraf ini sebenarnya bisa dihapus.)Untuk menyalin semua file ke direktori yang sama persis (di sini
target/directory
):-D
tidak wajib di sini, itu hanya akan membuat direktori yang tidak ada ke target.Untuk menyalin seluruh hierarki direktori dan file-nya (ini akan menghilangkan direktori kosong) mulai dari tempat Anda saat ini:
Seperti yang dikatakan, ini akan membuat ulang pohon mulai dari
$PWD
. Juga, jika Anda perlu menyalin direktori kosong, di dapat menemukan cara menggunakan-type d
darifind
daninstall -d
.Jadi, untuk menyalin pohon, mulai dari direktori yang bukan
$PWD
:Perhatikan bagaimana
parent/directory
tidak disalin.Tambahan
Bagi mereka yang menggunakan
shell/fish
, inilah baris yang melakukan hal yang sama:sumber