Eli Schwartz wrote: > On 10/29/24 2:05 PM, Dale wrote: >> I saw that but never understood what it did. I thought it was >> something that worked just with revdep-rebuild or something. So it >> is a bash thing. Interesting. That could open a can of worms. > It's not a bash thing. It is a software thing. It is mandated by the > POSIX standard: > > https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap12.html > > That means, as a general rule of thumb, all Unix commands required to > exist everywhere, *have to* support the usage of "--" in this manner. > And since it is a sensible thing to do, most programs, even not POSIX > programs, heed the wise advice of POSIX and support "--". >
Oh, that's good. I think. :/ That link has a lot of info. That could take a while to digest. I did find the -- part tho. > On 10/29/24 11:18 AM, Dale wrote: >> Howdy, >> >> I downloaded some files. I have a few that have some weird names. >> Some have those picture type characters. Some start with a dash, >> "-". In some cases I can use wild cards to change them. Frank gave >> me some ideas on that off list, while discussing his nifty checksum >> tool. Anyway, I ran up on a few that start with a dash, "-", and I >> can't find a way around that. The mv command thinks it is me trying >> to include a option. It spits out something like this. >> >> >> mv: unrecognized option '---ne.avi' >> >> >> Some of the other characters I run into look like this. >> >> >> ���� >> >> >> Those I can usually get around with wildcards. I have not found a >> way to get around the ones with the dash in front tho. I tried a >> single quote, double quote etc but still no worky. Also, tab >> completion doesn't help either. > > I feel like, in combination with the bash comment above, this speaks to > a general misunderstanding of how quotes, dashes, wildcards, etc work. > > > So I would like to clarify something here. If you try to > > $ mv ---ne.avi new-filename.avi > > and it doesn't work, and you try > > $ mv "---ne.avi" new-filename.avi > > > Or more generally, if you have a filename named > > this is a weird filename.avi > > > You have various options for writing a "mv" command for it in a bash > shell, but that's not actually what the "mv" program sees. > > Example: > > > $ mv "this is a weird filename.avi" better.avi > > is actually executed as an operating system array: > > {"mv", "this is a weird filename.avi", "better.avi"} > > > You can also do: > > $ mv this\ is\ a\ weird\ filename.avi better.avi > > Still, bash tries to figure out how to convert it into an operating > system array, and gets: > > {"mv", "this is a weird filename.avi", "better.avi"} > > You can even do: > > $ mv *weird*filename.avi" better.avi > > Still, bash tries to figure out how to convert it into an operating > system array, and gets: > > {"mv", "this is a weird filename.avi", "better.avi"} > > It's always converted to that array. But, > > $ mv this is a weird filename.avi better.avi > > becomes this array: > > {"mv", "this", "is", "a", "weird", "filename.avi", "better.avi"} > > and obviously that is an entirely different command because the array is > different (each part is a different filename, as far as "mv" knows.) > > > Same with stuff that begins with a dash. > > $ mv "---ne.avi" new-filename.avi > $ mv '---ne.avi' new-filename.avi > $ mv ---ne.avi new-filename.avi > $ mv *-ne.avi new-filename.avi > $ mv \-\-\-ne.avi new-filename.avi > > > all become > > {"mv", "---ne.avi", "new-filename.avi"} > > > Which does not help you because the array values that the "mv" command > sees are still starting with a single dash. > > > From bash (and from bash tab completion) all you can do is update bash > text lines which then get translated into arrays so you can execute the > array as a program. Quoting and wildcards do NOT affect how "mv" works. > All that quoting and wildcards do is affect whether space characters are > interpreted as part of the filename or as the separator between > different array items. > > The "mv" program is responsible for knowing what a dash is or does. It > tries first to treat it as an option, and that's why "--" works -- > because it tells "mv" itself to stop treating it as an option, and to > treat it as a filename instead. > > That is also why "./---new.avi" works. All filenames (except those > starting with / such as /home or /usr, of course) can have an added > directory at the beginning, and the obvious one is ./ but you could also > use "$PWD/---new.avi" if you wanted. Since it doesn't start with a dash, > it can't be an option. > Well, I did try single quotes, double quotes and other stuff I'd seen before but none worked. Eventually, I ran out of ideas. I've never ran into anything that required more than that either. So, I brought up my search engine and then it hit me, what do I search for???? I went outside, watered my kale and collard green seeds, and did some thinking. I couldn't even think of what to search for to find a answer. Given it didn't work in a GUI or command line, I was kinda lost. I did know tho, there was a way. There had to be. I decided to just ask. Now I have lots more info in case I run up on this again. I also added a entry to my tips cheat sheet. Oh, I can also run Frank's checksum tool on that directory. I store that data for someone else. It should ever change. That's the reason for the checksum tool for it. Thanks much. Dale :-) :-) P. S. My mustard and turnip greens are popping up. That will make family, friends and neighbors happy. I had to reseed my collard and kale. May have put first planting to deep.