GNU/Linux >> Belajar Linux >  >> Linux

penggunaan wildcard linux di cp dan mv

find perintah dapat digunakan cukup ringkas dalam kasus sederhana di mana Anda ingin melakukan operasi pada pencocokan nama file wildcard (atau lebih kompleks). Teknik di bawah ini dapat dikomit ke memori ... hampir!

Ini berfungsi dengan membiarkan find perintah jalankan perintah lain pada setiap nama file yang ditemukannya. Anda dapat menjalankan contoh ini menggunakan echo bukannya/di depan mv .

Jika kita ingin memindahkan semua file di direktori saat ini dengan nama awal 'laporan', ke direktori paralel lain bernama 'laporan' :

find . -name "report*.*" -exec mv '{}' ../reports/ \;

String karakter pengganti harus dalam tanda kutip, {} yang menandai nama file yang 'ditemukan' harus dalam tanda kutip, dan titik koma terakhir harus di-escape - semua karena perlakuan Bash/Shell terhadap karakter tersebut.

Lihatlah halaman manual untuk find untuk lebih banyak kegunaan:https://linux.die.net/man/1/find


Mari kita bahas sebentar tentang cara kerja wildcard.

cp *.txt foo

sebenarnya tidak memanggil cp dengan argumen *.txt , jika ada file yang cocok dengan gumpalan itu. Sebaliknya, ini menjalankan sesuatu seperti ini:

cp a.txt b.txt c.txt foo

Demikian pula, sesuatu seperti

mv *.txt *.old

... tidak mungkin tahu apa yang harus dilakukan, karena ketika dipanggil, yang dilihatnya adalah:

mv a.txt b.txt c.txt *.old

atau, lebih buruk lagi, jika Anda sudah memiliki file bernama z.old , itu akan melihat:

mv a.txt b.txt c.txt z.old

Jadi, Anda perlu menggunakan alat yang berbeda. Pertimbangkan:

# REPLACES: mv /data/*/Sample_*/logs/*_Data_time.err /data/*/Sample_*/logs/*_Data_time_orig.err
for f in /data/*/Sample_*/logs/*_Data_time.err; do
  mv "$f" "${f%_Data_time.err}_Data_time_orig.err"
done

# REPLACES: cp /data/*/Sample_*/scripts/*.sh /data/*/Sample_*/scripts/*_orig.sh
for f in /data/*/Sample_*/scripts/*.sh; do
  cp "$f" "${f%.sh}_orig.sh"
done

# REPLACES: sh /data/*/Sample_*/scripts/*_orig.sh
for f in /data/*/Sample_*/scripts/*_orig.sh; do
  if [[ -e "$f" ]]; then
    # honor the script's shebang and let it choose an interpreter to use
    "$f"
  else
    # script is not executable, assume POSIX sh (not bash, ksh, etc)
    sh "$f"
  fi
done

Ini menggunakan perluasan parameter untuk menghapus ujung ekor nama lama sebelum menambahkan nama baru.


Linux
  1. 4 Penggunaan Cut Command yang Esensial dan Praktis di Linux

  2. dd Contoh Perintah di Linux

  3. Ambil penggunaan CPU dan penggunaan memori dari satu proses di Linux?

  1. Penggunaan Memori Linux

  2. Perintah Linux Cat:Penggunaan dan Contohnya

  3. Ubuntu Linux:Memproses memori swap dan penggunaan memori

  1. Perintah Sed Linux:Penggunaan dan Contoh

  2. Perintah AWK Linux – Contoh Sintaks Penggunaan Linux dan Unix

  3. Perintah Linux df