Saya mencoba untuk mengeksekusi skrip bash ini yang mengulang file (yang memiliki spasi dalam nama) di direktori saat ini dan membuat folder baru dengan karakter pertama file (jika belum dibuat) dan memindahkan file itu ke folder . Ini kode saya:
for i in `/bin/ls | xargs`
do
dir=`echo "$i" | cut -c 1 -`
mkdir -m777 -p "$dir"
mv "$i" "$dir"
done
Masalah dengan ini tampaknya karena ia memperlakukan setiap kata dalam file sebagai file terpisah, jadi meskipun ia membuat folder dengan benar, itu tidak dapat memindahkan file ke folder itu karena nama file yang dicari adalah hanya kata pertama dari file aktual. Saya melihat jawaban lain untuk pertanyaan serupa tetapi ini adalah yang terdekat yang bisa saya dapatkan.
EDIT: Saya mengganti "for i in /bin/ls | xargs " dengan "for i in *" seperti yang disarankan @steeldriver, dan meskipun itu memperbaiki masalah asli saya, saya mendapatkan kesalahan seperti ini:
mv: cannot move '`' to a subdirectory of itself, '`/`'
mv: invalid option -- ' '
mv: missing destination file operand after '-'
mv: invalid option -- '.'
mv: invalid option -- ')'
mv: invalid option -- '+'
mv: cannot move ''$'\340' to a subdirectory of itself, ''$'\340''/'$'\340'
mv: cannot move ''$'\303' to a subdirectory of itself, ''$'\303''/'$'\303'
mv: cannot move ''$'\305' to a subdirectory of itself, ''$'\305''/'$'\305'
mv: invalid option -- '1'
Saya pikir beberapa file ini mungkin dimulai dengan karakter non-ascii (saya tidak dapat melihat konten karena ada terlalu banyak file). Apakah ada cara untuk menangani kasus ini?
ls. Anda mungkin harus melihat ke dalam menggunakan findatau shell globbing sederhana untuk mendapatkan daftar file Anda untuk diproses. Bacaan lebih lanjut tentang subjek ini dapat ditemukan di sini .
t.
for i in *; do ...- lihat Bash Pitfall # 1