如何最好地处理数组中文件和目录的混合。我需要创建一个由文件和文件夹组成的数组,循环遍历该数组,并将该数组中的每一项都应用于带有-rf选项的rm命令:
#Build array of files to be deleted
FILES=(
"~/Library/Preferences/Adobe InDesign"
"~/Library/Caches/Adobe InDesign"
"~/Library/Saved Application State/com.adobe.InDesign.savedstate"
)
#Loop through array deleting each file/directory with the recursive force options
for i in "${FILES[@]}"
do
rm -rf "$i"
done
exit发布于 2012-09-28 06:35:54
问题不在于数组或空格,而在于文件路径中的~。~实际上不是路径的有效部分,但外壳程序会将其替换为主目录的路径...除非它在引号中:
$ echo ~/Library/Preferences/Adobe InDesign
/Users/gordon/Library/Preferences/Adobe InDesign
$ echo "~/Library/Preferences/Adobe InDesign"
~/Library/Preferences/Adobe InDesign因此,您可以将~放在引号之外:
FILES=(
~/"Library/Preferences/Adobe InDesign"
~/"Library/Caches/Adobe InDesign"
~/"Library/Saved Application State/com.adobe.InDesign.savedstate"
)或者使用$HOME (用双引号将其替换):
FILES=(
"$HOME/Library/Preferences/Adobe InDesign"
"$HOME/Library/Caches/Adobe InDesign"
"$HOME/Library/Saved Application State/com.adobe.InDesign.savedstate"
)发布于 2012-09-28 04:12:00
我有时会用到这个技巧:
with_expanded_paths()
{
typeset IFS
IFS=""
"$@"
}
with_expanded_paths rm -rf "~/file with spaces"我是从内存中写的,所以可能需要做一些细微的调整。
https://stackoverflow.com/questions/12627776
复制相似问题