我有一个文件列表,我试图复制和移动(使用cp和mv)在bash shell脚本中。我遇到的问题是,我无法让任何一个命令识别大量文件,这似乎是因为文件名包含空格和/或unicode字符。我无法找到任何开关来解码/重新编码这些字符。相反,例如,如果我复制“file name.xml”,则会得到“* .xml”,并显示脚本错误,指出找不到我的结果文件。有谁知道将处理这些文件的设置或命令?使用shell脚本时,如何使用包含空格和UNICODE的名称复制文件?
EDIT(添加当前代码): 当我运行:
的MacBookPro:桌面$ ./script.sh
#!/bin/sh
dateVar=`date +%Y-%m-%d`
mkdir /Volumes/Documents/SMSarchive/$dateVar
cd /Volumes/Documents/SMSarchive/SMSdrop
for i in *.xml
do
cp $i /Volumes/Documents/SMSarchive/$dateVar/$dateVar-$i
done
我得到的消息:
用法:CP [ - R [-H | -L | -P]] [-fi | -n] [-pvX] source_file target_file cp [-R [-H | -L | -P]] [-fi | -n] [-pvX] source_file ... target_directory
...当它命中“cp”命令时。实际上脚本还有更多处理复制文件的内容。使用“常规”文件名例如'file.xml',一切工作正常。这只是带有空格或Unicode字符的文件,我遇到问题。
谢谢!将代码更改为: cp“$ i”/ Volumes/Documents/SMSarchive/$ dateVar /“$ dateVar” - “$ i” ...完美运作! – LOlliffe 2010-03-31 06:28:18
或甚至:'cp“$ i”“/ Volumes/Documents/SMSarchive/$ dateVar/$ dateVar- $ i”'。在一个shell脚本中,*总是*引用变量,除非你有一个特定的原因。 – 2010-03-31 11:54:52