无法使用变量rm -rf

时间:2019-07-12 12:58:55

标签: bash ubuntu console rm

我正在尝试编写一个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"/*

在输出中,它显示了文件的正确路径...

2 个答案:

答案 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"/*

应该可以再次使用。