Saya memiliki folder besar gambar (ribuan), dan saya memiliki daftar panjang file, dengan nama file yang tepat, yang perlu saya salin ke folder lain. Saya ingin tahu apakah ada cara saya dapat memilih beberapa file spesifik dari folder ini, dengan nama, dan menyalinnya ke folder lain, menggunakan terminal, tanpa menyalinnya secara individual?
command-line
files
Seseorang dengan terlalu banyak foto
sumber
sumber
cp -rp /copying/from/{folder1/,folder2/,folder3/} path/to/folder
manap
untuk menyalin izin folder.Jawaban:
Cukup salin beberapa file sekaligus dari baris perintah
Ada beberapa cara Anda bisa mencapainya. Cara termudah yang saya lihat adalah menggunakan yang berikut ini.
Sintaks menggunakan perintah cp diikuti oleh path ke direktori file yang diinginkan terletak di dengan semua file yang ingin Anda salin dibungkus dengan tanda kurung dan dipisahkan dengan koma.
Pastikan untuk mencatat bahwa tidak ada spasi di antara file. Bagian terakhir dari perintah
/home/usr/destination/
,, adalah direktori tempat Anda ingin menyalin file.atau jika semua file memiliki awalan yang sama tetapi ujung yang berbeda Anda bisa melakukan sesuatu seperti ini:
Di mana file1, file2, file3 dan file4 akan disalin.
Dari cara Anda mengucapkan pertanyaan, saya yakin inilah yang Anda cari, tetapi sepertinya Anda juga mencari perintah untuk membaca dari daftar file dan menyalinnya ke direktori tertentu. Jika demikian, beri tahu saya dan saya akan mengedit jawaban saya.
Berurusan dengan duplikat dengan python
Jadi saya menulis skrip python kecil yang saya percaya harus menyelesaikan pekerjaan. Namun, saya tidak yakin seberapa baik Anda berpengalaman dalam python (jika berpengalaman sama sekali) jadi saya akan mencoba menjelaskan cara menggunakan skrip ini sebaik mungkin dan tolong tanyakan sebanyak mungkin pertanyaan tentangnya sesuai kebutuhan.
Script ini harus relatif mudah digunakan. Pertama, salin kode di atas ke dalam program gedit (harus diinstal sebelumnya di Ubuntu) atau editor teks lainnya.
Setelah itu selesai, simpan file sebagai move.py di direktori home Anda (bisa berupa direktori apa saja tetapi untuk kemudahan pengajaran, cukup gunakan direktori home) atau tambahkan direktori file yang terkandung di dalam PATH Anda. Kemudian
cd
ke direktori home Anda (atau direktori apa pun yang Anda simpan move.py) dari terminal dan ketikkan perintah berikut:Ini harus menyalin semua file yang terdaftar dari direktori sumber ke direktori tujuan dengan duplikat mengambil format pic (1) .jpg, pic (2) .jpg dan sebagainya. file.txt harus berupa file yang mencantumkan semua gambar yang ingin Anda salin dengan setiap entri pada barisnya masing-masing.
Tidak mungkin skrip ini mempengaruhi direktori sumber, namun pastikan untuk memasukkan jalur yang benar ke direktori sumber dan tujuan dan yang terburuk yang bisa terjadi adalah Anda menyalin file ke direktori yang salah.
Catatan
"file tidak ada" dan meminta Anda untuk "tekan enter" untuk melanjutkan dan skrip akan terus menyalin sisa daftar.
/
jejak di kedua jalur kedirektori sumber dan jalur ke direktori tujuan. Kalau tidak, skrip akan membalas kesalahan Anda.
sumber
cp $(pwd)/{file1,file2} /path/to/dst/
ataucp $(pwd)/{file1,file2} $(pwd)/{renamed1,renamed2}
, dll.Mungkin saya melewatkan detail pertanyaan Anda, tetapi jawaban yang diberikan tampak berlebihan. Jika Anda menginginkan solusi baris perintah dan bukan skrip, mengapa tidak:
Hal yang menyenangkan tentang melakukannya dengan cara ini adalah Anda dapat menabisi nama file dengan lengkap
sumber
brew install coreutils
maka Anda bisa mendapatkan barang-barang gnu biasa dengang
awalan. Jadi itu akan menjadigcp -t ....
cp
, dan terutama OpenBSD atau FreeBSD tidak memiliki opsi itu, jadi ya - inicp
khusus untuk GNU . Itu juga tidak ditentukan oleh standar POSIX . Karena ini adalah situs spesifik Ubuntu, ini dapat diterima, tetapi untuk porting skrip antara OS lebih baik tetap menggunakan standar POSIXInilah solusi bash murni. Ini akan membaca nama file dari file input (satu per baris) dan menyalin masing-masing, mengganti nama duplikat.
Simpan skrip ini dalam folder di folder Anda
$PATH
dan beri nama lintasan sebagai input:Anda juga dapat menjalankan semuanya sebagai perintah dari terminal:
sumber
Sesuai deskripsi pertanyaan, pengertian saya adalah:
input.txt
Dengan demikian, seseorang dapat menggunakan perintah berikut:
Penjelasan:
-I %
menentukan simbol untuk file yang sedang diproses untuk digunakan dalam perintah--arg-file=input.txt
menentukan untuk mengambil argumen dari perintahinput.txt
cp /path/to/origin_dir/% /path/to/destination/
akan melakukancp
perintah dengan/path/to/origin_dir/%
diganti/path/to/origin_dir/
dan nama file yang sedang diproses.Contoh praktis:
sumber