Saya ingin menggunakan find
untuk menemukan file dalam satu set folder yang dibatasi oleh wildcard, tetapi di mana ada spasi dalam nama path.
Dari baris perintah, ini mudah. Contoh-contoh berikut semuanya berfungsi.
find te*/my\ files/more -print
find te*/'my files'/more -print
find te*/my' 'files/more -print
Ini akan menemukan file di, misalnya, terminal/my files/more
dan tepid/my files/more
.
Namun, saya ingin ini menjadi bagian dari naskah; yang saya butuhkan adalah sesuatu seperti ini:
SEARCH='te*/my\ files/more'
find ${SEARCH} -print
Sayangnya, apa pun yang saya lakukan, saya tampaknya tidak dapat mencampur wildcard dan spasi dalam find
perintah dalam skrip. Contoh di atas mengembalikan kesalahan berikut (perhatikan penggandaan backslash yang tidak terduga):
find: ‘te*/my\\’: No such file or directory
find: ‘files/more’: No such file or directory
Mencoba menggunakan tanda kutip juga gagal.
SEARCH="te*/'my files'/more"
find ${SEARCH} -print
Ini mengembalikan kesalahan berikut, setelah mengabaikan arti dari kutipan:
find: ‘te*/'my’: No such file or directory
find: ‘files'/more’: No such file or directory
Ini satu contoh lagi.
SEARCH='te*/my files/more'
find ${SEARCH} -print
Seperti yang diharapkan:
find: ‘te*/my’: No such file or directory
find: ‘files/more’: No such file or directory
Setiap variasi yang saya coba mengembalikan kesalahan.
Saya memiliki solusi, yang berpotensi berbahaya karena mengembalikan terlalu banyak folder. Saya mengonversi semua spasi menjadi tanda tanya (wildcard satu karakter) seperti ini:
SEARCH='te*/my files/more'
SEARCH=${SEARCH// /?} # Convert every space to a question mark.
find ${SEARCH} -print
Ini setara dengan:
find te*/my?files/more -print
Ini mengembalikan tidak hanya folder yang benar tetapi juga terse/myxfiles/more
, yang seharusnya tidak.
Bagaimana saya bisa mencapai apa yang saya coba lakukan? Google belum membantu saya :(
find "${SEARCH}" -print
?
te*/'my files'/more
.
SEARCH: command not found
perintahfind -print
yang dieksekusi.