我正在尝试编写一个BASH脚本,但它将递归删除目录中的所有文件。
当我在控制台function writeDataToFirebase() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheets()[0];
var data = sheet.getDataRange().getValues();
var dataToImport = {};
for(var i = 1; i < data.length; i++) {
var ItemCode = data[i][0];
var Batch = data[i][3];
dataToImport[ ItemCode ] = {
ItemDesc:data[i][1],
VenCode:data[i][8],
VenName:data[i][9],
}
for(var i = 1; i < data.length; i++) {
var Batch = data[i][3];
dataToImport[ Batch ] = {
barcode:data[i][2],
ExpDate:data[i][4],
ComPrice:data[i][5],
TaxVal:data[i][6],
PubPrice:data[i][7]
}
}
}
var firebaseUrl = "https://example.firebaseio.com/";
var base = FirebaseApp.getDatabaseByUrl(firebaseUrl);
base.setData("itemsInventory", dataToImport);
}
中编写代码时,它可以很好地工作,但是我不能使用变量来完成它。
rm -rf /home/dir/dir/*
此代码对我不起作用。
已更新。 真的很奇怪。我已经尝试删除引号,但是它不起作用。
这是我的整个文件:
VAR="/home/dir/dir"
rm -rf "$VAR"/*
在输出中,它显示了文件的正确路径...
答案 0 :(得分:2)
1)删除双引号字符串内空格前的\
。您无需在引号内转义空格。 rm
命令(或expansion期间的shell)正在寻找包含字面反斜杠和空格的路径,这可能是错误的。
2)必须引用该变量的用法,以使所包含的空格不会干扰word splitting。
3)如果文件夹为空(除非您设置了某些选项),外壳将无法展开*
。然后,rm
命令将查找字面包含*
的文件,并且当然会失败。
4)如果您希望shell将其扩展到~
,请不要引用${HOME}
。或者直接使用${HOME}
,因为shell处理~
的规则有些棘手。
由于您仍然要删除文件夹的内容,因此最好使用find
:
LOGS_PATH="${HOME}/Документы/tellbot_work/tellbot-autotest/mega-test/Reports/Mega test"
find "${LOGS_PATH}" -depth -mindepth 1 -delete
-depth
会告诉find
首先进行 depth 操作,即先“查找”文件夹的内容,然后再“查找”文件夹本身。这是必要的,因为您要删除找到的结果,结果必须是文件或空文件夹,因此必须从内而外完成。-mindepth 1
会告诉find
从结果中排除基本目录,因此您不会删除基本目录-delete
将告诉find
删除找到的路径。省略-delete
以仅查看结果,而不删除它们。您可以在末尾添加-print
,以查看删除了哪些路径。
答案 1 :(得分:1)
您只需使用变量home即可避免出现波浪号问题。 所以只要写
LOGS_PATH="${HOME}/Документы/tellbot_work/tellbot-autotest/mega-test/Reports/Mega test"
代替
LOGS_PATH="~/Документы/tellbot_work/tellbot-autotest/mega-test/Reports/Mega test"
和命令
rm -rf "$LOGS_PATH"/*
应该可以再次使用。