Terminal sed ke file perintah

0

Saya memiliki skrip ini untuk menghapus 4 baris pertama dari setiap file dalam folder jika ekstensi mereka .txt.

Saya ingin dapat menempatkan file.command dengan skrip ini di folder yang sama sehingga saya bisa mengklik dua kali dan menjalankannya.

Jadi saya membuat file dengan ini:

#!/bin/bash

find . -type f -name "*.txt" -exec sed -i.bak '1,4d' {} \;

Jika saya menjalankan file, saya memiliki semua file txt Mac saya dihapus 4 :(

Saya pikir find .itu dimaksudkan untuk tetap di folder yang sama ...

Bagaimana cara memperbaikinya agar perintah HANYA berjalan di folder file.command?

Mr.Web
sumber
Tambang bekerja dengan baik, coba jalankan dengan -maxdepth 1dan menghapus sedbagian untuk melihat file yang akan terpengaruh
George Udosen
Apakah Anda menjalankannya dari folder yang dimaksud?
George Udosen
Saya membuat file di folder yang sama Saya punya txts dan saya klik dua kali di atasnya - Ya folder yang sama
Mr.Web
Jalankan dengan -maxdepth 1dan lihat apa yang terjadi
George Udosen
Saya mencoba find . -maxdepth 1 -type f -name "*.txt" -exec sed -i.bak '1,4d' {} \;tetapi tidak ada yang terjadi ..
Mr.Web

Jawaban:

1

Kode ini:

find . -maxdepth 1 -type f -name "*.txt" -exec sed -i.bak '1,4d' {} \;

benar-benar berfungsi, masalahnya adalah:

  1. File yang dibuat dengan perintah tidak dibuat executableuntuk itu:

    chmod +x file.command
  2. Kemudian jalankan perintah dari terminal dengan:

    ./file.command
George Udosen
sumber
0

Seperti yang telah dikomentari, findsecara default turun ke subdirektori.

Lakukan ini sebagai gantinya:

#!/bin/bash
cd "$(dirname "$0")"          # change directory to the location of the script
for file in *.txt; do         # and iterate over the .txt files
    sed -i.bak '1,4d' "$file"
done
glenn jackman
sumber