|
|
|
|
||||||
| comp.unix.shell Using and programming the Unix shell. |
![]() |
|
|
LinkBack | Outils de la discussion |
|
|
#1 (permalink) |
|
Messages: n/a
Hébergeur: |
I have a list (about 600) of files whose names contain special
characters, such as spaces, &, (. Under bash, they have to be escaped. I was wondering if there is any command, or even a piece of sed, which can be used to escape them. |
|
|
|
#2 (permalink) |
|
Messages: n/a
Hébergeur: |
On 2006-08-21, Jerry Fleming wrote:
> I have a list (about 600) of files whose names contain special > characters, such as spaces, &, (. Under bash, they have to be escaped. I > was wondering if there is any command, or even a piece of sed, which can > be used to escape them. How are you using the names? The usual method is to quote the file name: for file in ./* do cat "$file" done -- Chris F.A. Johnson, author <http://cfaj.freeshell.org> Shell Scripting Recipes: A Problem-Solution Approach (2005, Apress) ===== My code in this post, if any, assumes the POSIX locale ===== and is released under the GNU General Public Licence |
|
|
|
#3 (permalink) |
|
Messages: n/a
Hébergeur: |
Chris F.A. Johnson wrote:
> On 2006-08-21, Jerry Fleming wrote: >> I have a list (about 600) of files whose names contain special >> characters, such as spaces, &, (. Under bash, they have to be escaped. I >> was wondering if there is any command, or even a piece of sed, which can >> be used to escape them. > > How are you using the names? > > The usual method is to quote the file name: > > for file in ./* > do > cat "$file" > done > I am using the names with scp: scp special_file root@host:~/"special_file" Here I have to quote the destination special_file twice, one with double quotes, one with escapes. Only double quotes won't work. I am wondering how to escape special chars of filenames in a script. |
|
|
|
#4 (permalink) |
|
Messages: n/a
Hébergeur: |
On 2006-08-21, Jerry Fleming wrote:
> Chris F.A. Johnson wrote: >> On 2006-08-21, Jerry Fleming wrote: >>> I have a list (about 600) of files whose names contain special >>> characters, such as spaces, &, (. Under bash, they have to be escaped. I >>> was wondering if there is any command, or even a piece of sed, which can >>> be used to escape them. >> >> How are you using the names? >> >> The usual method is to quote the file name: >> >> for file in ./* >> do >> cat "$file" >> done >> > I am using the names with scp: > > scp special_file root@host:~/"special_file" > > Here I have to quote the destination special_file twice, one with double > quotes, one with escapes. Only double quotes won't work. I am wondering > how to escape special chars of filenames in a script. Use escaped quotes: scp special_file root@host:~/"\"special file\"" scp special_file root@host:~/"\"$file\"" -- Chris F.A. Johnson, author <http://cfaj.freeshell.org> Shell Scripting Recipes: A Problem-Solution Approach (2005, Apress) ===== My code in this post, if any, assumes the POSIX locale ===== and is released under the GNU General Public Licence |
|
|
|
#5 (permalink) |
|
Messages: n/a
Hébergeur: |
Jerry Fleming wrote:
> Chris F.A. Johnson wrote: > > On 2006-08-21, Jerry Fleming wrote: > >> I have a list (about 600) of files whose names contain special > >> characters, such as spaces, &, (. Under bash, they have to be escaped. I > >> was wondering if there is any command, or even a piece of sed, which can > >> be used to escape them. > > > > How are you using the names? > > > > The usual method is to quote the file name: > > > > for file in ./* > > do > > cat "$file" > > done > > > I am using the names with scp: > > scp special_file root@host:~/"special_file" > > Here I have to quote the destination special_file twice, one with double > quotes, one with escapes. Only double quotes won't work. I am wondering > how to escape special chars of filenames in a script. If you dont want to change the destination filename, then use 'dot' is enough, and no need to add ~/ to specify home directory(default). scp "$special_file" root@host:. But if the SRC of scp command isn't a shell variable, then using single-quotes is safer: scp 'special_file' root@host:. you can also use TAB auto-completion, shell can add proper backslashes for you. Xicheng |
|
|
|
#6 (permalink) |
|
Messages: n/a
Hébergeur: |
Xicheng Jia wrote:
> Jerry Fleming wrote: >> Chris F.A. Johnson wrote: >>> On 2006-08-21, Jerry Fleming wrote: >>>> I have a list (about 600) of files whose names contain special >>>> characters, such as spaces, &, (. Under bash, they have to be escaped. I >>>> was wondering if there is any command, or even a piece of sed, which can >>>> be used to escape them. >>> How are you using the names? >>> >>> The usual method is to quote the file name: >>> >>> for file in ./* >>> do >>> cat "$file" >>> done >>> >> I am using the names with scp: >> >> scp special_file root@host:~/"special_file" >> >> Here I have to quote the destination special_file twice, one with double >> quotes, one with escapes. Only double quotes won't work. I am wondering >> how to escape special chars of filenames in a script. > > If you dont want to change the destination filename, then use 'dot' is > enough, and no need to add ~/ to specify home directory(default). > > scp "$special_file" root@host:. > > But if the SRC of scp command isn't a shell variable, then using > single-quotes is safer: > > scp 'special_file' root@host:. > > you can also use TAB auto-completion, shell can add proper backslashes > for you. > > Xicheng > Thanks for all your . But I am using scp in a non-interactive script, so auto-completion is no , and I do want the destination filename to be different than the source. I have to escape the special chars with backslashes. The problem is that I don't know where to insert the backslashes in the filenames and where. |
|
|
|
#7 (permalink) |
|
Messages: n/a
Hébergeur: |
Jerry Fleming wrote:
> Xicheng Jia wrote: >> Jerry Fleming wrote: >>> Chris F.A. Johnson wrote: >>>> On 2006-08-21, Jerry Fleming wrote: >>>>> I have a list (about 600) of files whose names contain special >>>>> characters, such as spaces, &, (. Under bash, they have to be >>>>> escaped. I >>>>> was wondering if there is any command, or even a piece of sed, >>>>> which can >>>>> be used to escape them. >>>> How are you using the names? >>>> >>>> The usual method is to quote the file name: >>>> >>>> for file in ./* >>>> do >>>> cat "$file" >>>> done >>>> >>> I am using the names with scp: >>> >>> scp special_file root@host:~/"special_file" >>> >>> Here I have to quote the destination special_file twice, one with double >>> quotes, one with escapes. Only double quotes won't work. I am wondering >>> how to escape special chars of filenames in a script. >> >> If you dont want to change the destination filename, then use 'dot' is >> enough, and no need to add ~/ to specify home directory(default). >> >> scp "$special_file" root@host:. >> >> But if the SRC of scp command isn't a shell variable, then using >> single-quotes is safer: >> >> scp 'special_file' root@host:. >> >> you can also use TAB auto-completion, shell can add proper backslashes >> for you. >> >> Xicheng >> > Thanks for all your . But I am using scp in a non-interactive > script, so auto-completion is no , and I do want the destination > filename to be different than the source. I have to escape the special > chars with backslashes. The problem is that I don't know where to insert > the backslashessed in the filenames and where. sed 's/[^x]/\\&/g' |
|
|
|
#8 (permalink) |
|
Messages: n/a
Hébergeur: |
Jerry Fleming wrote:
> Xicheng Jia wrote: > > Jerry Fleming wrote: > >> Chris F.A. Johnson wrote: > >>> On 2006-08-21, Jerry Fleming wrote: > >>>> I have a list (about 600) of files whose names contain special > >>>> characters, such as spaces, &, (. Under bash, they have to be escaped. I > >>>> was wondering if there is any command, or even a piece of sed, which can > >>>> be used to escape them. > >>> How are you using the names? > >>> > >>> The usual method is to quote the file name: > >>> > >>> for file in ./* > >>> do > >>> cat "$file" > >>> done > >>> > >> I am using the names with scp: > >> > >> scp special_file root@host:~/"special_file" > >> > >> Here I have to quote the destination special_file twice, one with double > >> quotes, one with escapes. Only double quotes won't work. I am wondering > >> how to escape special chars of filenames in a script. > > > > If you dont want to change the destination filename, then use 'dot' is > > enough, and no need to add ~/ to specify home directory(default). > > > > scp "$special_file" root@host:. > > > > But if the SRC of scp command isn't a shell variable, then using > > single-quotes is safer: > > > > scp 'special_file' root@host:. > > > > you can also use TAB auto-completion, shell can add proper backslashes > > for you. > > > > Xicheng > > > Thanks for all your . But I am using scp in a non-interactive > script, so auto-completion is no , and I do want the destination > filename to be different than the source. I have to escape the special > chars with backslashes. The problem is that I don't know where to insert > the backslashes in the filenames and where. You don't need to insert backslashes, use the way Chris mentioned in his previous post(some minor modification): scp 'src_special_name' root@host:"'dest_special_name'" scp "$src_special_val" root@host:"'$dest_special_val'" Be careful with the positions of single-quotes(inside) and double-quotes(outside) in the DESC part. Good luck, Xicheng |
|
![]() |
| Outils de la discussion | |
|
|