|
|
|
|
||||||
| comp.unix.shell Using and programming the Unix shell. |
![]() |
|
|
LinkBack | Outils de la discussion |
|
|
#1 |
|
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 |
|
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 |
|
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 |
|
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 |
|
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 |
|
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 |
|
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 |
|
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 |
|
|
|
#9 |
|
Messages: n/a
Hébergeur: |
On 21.08.2006, Jerry Fleming <jerry@dd.comlk> wrote:
>>> 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. [...] > 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. And how about getting that done different way? Copy all files from local host to remote and rename them on remote host? tar zcf - files ... | ssh root@host 'cd destination; tar zxf -; now-rename-files' -- Stanislaw Klekot |
|
![]() |
| Outils de la discussion | |
|
|