Bagaimana Anda bisa menghapus semua spasi kosong dari keseluruhan proyek? Memulai dari direktori root, dan menghapus spasi kosong dari semua file di semua folder.
Selain itu, saya ingin dapat mengubah file secara langsung, dan tidak hanya mencetak semuanya ke stdout.
bash
whitespace
iamjwc
sumber
sumber
Jawaban:
Berikut adalah solusi OS X> = 10.6 Snow Leopard.
Ini Mengabaikan folder .git dan .svn dan isinya. Juga tidak akan meninggalkan file cadangan.
sumber
\+
alih-alih*
di string pengganti - Jika tidak, itu cocok di setiap baris.sed: RE error: illegal byte sequence
untukku.export LANG=C
dan coba lagiexport LC_CTYPE=C
seperti yang ditemukan di sini: stackoverflow.com/questions/19242275/…Menggunakan:
jika Anda tidak ingin file ".bak" dibuat:
sebagai pengguna zsh, Anda dapat menghilangkan panggilan untuk menemukan, dan sebagai gantinya menggunakan:
Catatan: Untuk mencegah menghancurkan
.git
direktori, coba tambahkan:-not -iwholename '*.git*'
.sumber
.git
direktori, tidak peduli seberapa dalam bersarangnya.find . -not \( -name .svn -prune -o -name .git -prune \) -type f -print0 | xargs -0 perl -pi -e 's/ +$//'
rsync -rv --exclude=.git repo/ repo2/
setelah itu perubahan lokalrepo
juga di (tidak rusak)repo2
.Dua pendekatan alternatif yang juga bekerja dengan baris baru DOS (CR / LF) dan melakukan pekerjaan yang cukup baik dalam menghindari file biner :
Solusi umum yang memeriksa bahwa tipe MIME dimulai dengan
text/
:Solusi khusus repositori Git oleh Mat yang menggunakan
-I
opsigit grep
untuk melewati file yang dianggap Git sebagai biner:sumber
sed
opsi sufiks untuk-i
adalah opsional , tetapi di BSDsed
tidak. Sebenarnya tidak perlu di sini, jadi saya akan menghapusnya saja.Di Bash:
find dir -type f -exec sed -i 's/ *$//' '{}' ';'
Catatan: Jika Anda menggunakan
.git
repositori, coba tambahkan:-not -iwholename '.git'
.sumber
Ini bekerja untuk saya di OSX 10.5 Leopard, yang tidak menggunakan GNU sed atau xargs.
Berhati-hatilah dengan ini jika Anda memiliki file yang perlu dikecualikan (saya lakukan)!
Anda dapat menggunakan -prune untuk mengabaikan direktori atau file tertentu. Untuk file Python dalam repositori git, Anda dapat menggunakan sesuatu seperti:
sumber
find dir -not -path '.git' -iname '*.py' -print0 | xargs -0 sed --in-place=.bak 's/[[:space:]]*$//'
. Gantidir
dengan direktori yang dipermasalahkan sebagai tingkat teratas tempat perulangan.sed -i .bak
? Bukankah seharusnyased -i.bak
(tanpa spasi)?Ack dibuat untuk tugas semacam ini.
Ia bekerja seperti grep, tetapi tahu untuk tidak turun ke tempat-tempat seperti .svn, .git, .cvs, dll.
Jauh lebih mudah daripada melompati lingkaran dengan find / grep.
Ack tersedia melalui sebagian besar pengelola paket (sebagai ack atau ack-grep ).
Ini hanya program Perl, jadi ini juga tersedia dalam versi file tunggal yang dapat Anda unduh dan jalankan. Lihat: Ack Install
sumber
ack
sangat bagus. Telah menggunakannya selama beberapa tahun, dan tersedia di hampir semua repo paket untuk kebanyakan distro.ex
Coba gunakan Ex editor (bagian dari Vim):
Catatan: Untuk rekursi (bash4 & zsh), kami menggunakan opsi globbing baru (
**/*.*
). Aktifkan olehshopt -s globstar
.Anda dapat menambahkan fungsi berikut ke dalam Anda
.bash_profile
:sed
Untuk menggunakan
sed
, periksa: Bagaimana cara menghapus spasi putih tertinggal dengan sed?find
Temukan skrip berikut (misalnya
remove_trail_spaces.sh
) untuk menghapus spasi kosong dari file:Jalankan skrip ini dari direktori yang ingin Anda pindai. Di OSX pada akhirnya, itu akan menghapus semua file yang diakhiri dengan
.bak
.Atau hanya:
yang direkomendasikan oleh Spring Framework Code Style .
sumber
find . -type f -name "*.java" -exec perl -p -i -e "s/[ \t]$//g" {} \;
hanya menghapus satu spasi tambahan, bukan semua.Saya akhirnya tidak menggunakan temukan dan tidak membuat file cadangan.
Bergantung pada kedalaman pohon file, ini (versi yang lebih pendek) mungkin cukup untuk kebutuhan Anda.
CATATAN ini juga membutuhkan file biner, misalnya.
sumber
Alih-alih mengecualikan file, berikut adalah variasi dari daftar putih di atas yang secara eksplisit mencantumkan file, berdasarkan ekstensi file, yang ingin Anda hapus, silakan bumbui sesuai selera:
sumber
-name "*.rb*"
Saya akhirnya menjalankan ini, yang merupakan campuran antara versi pojo dan adams.
Ini akan membersihkan kedua spasi kosong, dan juga bentuk lain dari spasi kosong, carriage return:
Itu tidak akan menyentuh folder .git jika ada.
Edit : Membuatnya sedikit lebih aman setelah komentar, tidak mengizinkan untuk mengambil file dengan ".git" atau ".svn" di dalamnya. Namun berhati-hatilah, ini akan menyentuh file biner jika Anda punya. Gunakan
-iname "*.py" -or -iname "*.php"
setelah-type f
jika Anda hanya ingin menyentuh misalnya file .py dan .php.Pembaruan 2 : Sekarang mengganti semua jenis spasi di akhir baris (yang juga berarti tab)
sumber
Ini bekerja dengan baik .. tambahkan / hapus - termasuk untuk jenis file tertentu:
sumber
Rubi:
sumber
Saya menggunakan ekspresi reguler. 4 langkah:
Ini menghapus semua spasi di akhir setiap baris di semua file. Dan Anda dapat mengecualikan beberapa file yang tidak sesuai dengan kebutuhan ini.
sumber
1) Banyak jawaban lain digunakan
-E
. Saya tidak yakin mengapa, karena itu adalah opsi kompatibilitas BSD yang tidak berdokumen .-r
harus digunakan sebagai gantinya.2) Gunakan jawaban lain
-i ''
. Itu harus adil-i
(atau-i''
jika disukai), karena-i
memiliki sufiks tepat setelahnya.3) Solusi khusus Git:
Yang pertama mendaftarkan alias git
check-whitespace
yang mencantumkan file dengan spasi putih di belakangnya. Yang kedua menimpased
mereka.Saya hanya menggunakan
\t
daripada[:space:]
karena saya biasanya tidak melihat tab vertikal, umpan formulir, dan spasi yang tidak dapat dipecahkan. Pengukuran Anda mungkin berbeda.sumber
Inilah yang berhasil untuk saya (Mac OS X 10.8, GNU sed diinstal oleh Homebrew):
Spasi tertinggal dihapus, menggantikan tab dengan spasi, menggantikan Windows CRLF dengan Unix
\n
.Yang menarik adalah saya harus menjalankan ini 3-4 kali sebelum semua file diperbaiki, dengan semua
gsed
instruksi pembersihan .sumber