Sujet : Re: Long filenames in DOS/Windows and Unix/Linux
De : Keith.S.Thompson+u (at) *nospam* gmail.com (Keith Thompson)
Groupes : comp.unix.programmerDate : 04. Sep 2024, 01:27:34
Autres entêtes
Organisation : None to speak of
Message-ID : <87bk141cw9.fsf@nosuchdomain.example.com>
References : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
User-Agent : Gnus/5.13 (Gnus v5.13)
Lawrence D'Oliveiro <
ldo@nz.invalid> writes:
On Tue, 03 Sep 2024 16:10:42 -0700, Keith Thompson wrote:
Lawrence D'Oliveiro <ldo@nz.invalid> writes:
On Tue, 03 Sep 2024 15:16:36 -0700, Keith Thompson wrote:
For example, I might type something like:
for file in * ; do cp -p $file $file.bak ; done
>
It’s quite easy to fix that to work with spaces in file names.
I wouldn't call it "quite easy".
>
As easy as this, in Bash at least:
>
IFS=$'\n'
>
I’ve been told elsewhere that $'\n' is also valid in the latest Posix
spec.
Not bad -- but of course that's not all you have to do.
I tried it just now. My first attempt was
IFS='\n' for file in * ; do cp -p $file $file.bak ; done
but that's a syntax error ("for" is a shell keyword, not a command).
Second attempt:
IFS='\n' ; for file in * ; do cp -p $file $file.bak ; done
but that leaves IFS set to its new value in my interactive shell.
Either of these seems to work:
( IFS='\n' ; for file in * ; do cp -p $file $file.bak ; done )
{ IFS='\n' ; for file in * ; do cp -p $file $file.bak ; done }
That's still more trouble than it's worth *for me*. It handles
99+% of real-world cases, but I expect it would fail if a file had
a newline in its name. (Actually a quick experiment indicates that
that seems to work. I don't know how or why.) I have other ways of
handling this kind of thing if I need 100% reliability regardless of
any funny characters in file names (Perl, readdir). And the simple
"for file in *" handles 99% of the cases that I personally have to
deal with.
-- Keith Thompson (The_Other_Keith) Keith.S.Thompson+u@gmail.comvoid Void(void) { Void(); } /* The recursive call of the void */