我可以创建一个文件,但不能remote-ftp
用 Atom(icetee 版本 2.2.4)删除它。
这不是权限问题,因为我已经user:group
对文件及其父目录的完全所有权进行了测试。
该问题与权限无关的额外证据是,我可以使用第三方软件(如 FileZilla),并且它将能够删除该文件(相同的 sFTP 凭据)。
我在多个 VPS 服务器上都遇到了这个问题 - 所以我认为我一直在.ftpconfig
错误地配置文件,或者这是模块中的错误remote-ftp
?似乎没有人报告过这个问题,所以这可能都是我的错?这是我的配置文件:
{
"protocol": "sftp",
"host": "IP_ADDRESS",
"port": 22,
"user": "USERNAME",
"pass": "SUPER_SECRET_PASSWORD_GOES_HERE",
"promptForPass": false,
"remote": "/",
"local": "",
"agent": "",
"privatekey": "",
"passphrase": "",
"hosthash": "",
"ignorehost": true,
"connTimeout": 10000,
"keepalive": 10000,
"keyboardInteractive": false,
"keyboardInteractiveForPass": false,
"remoteCommand": "",
"remoteShell": "",
"watch": [],
"watchTimeout": 500,
"filePermissions":"0644"
}
答案1
事实证明,该问题与 Atom 有关,与 remote-ftp 包无关。修复已在这里讨论关于 GitHub 上该包的这个问题报告。
报告内容如下:
“因此,Atom 对话框存在一个问题,导致它无法调用启用实际删除的回调。这个问题要到 1.54 版才会得到修补,目前,我使用以下代码在第 279 行编辑了 remote-ftp command.js 文件,然后重新启动了 Atom。这会导致删除操作在没有提示的情况下发生,所以要小心。一旦 1.54 版推出,只需撤消代码即可。”
前
'remote-ftp:delete-selected': { enabled: true, command() { if (!hasProject()) return; const remotes = getRemotes('You need to select a folder first'); if (remotes === false) return; atom.confirm({ message: 'Are you sure you want to delete the selected item ?', detailedMessage: `You are deleting:${remotes.map(view => `\n ${view.item.remote}`)}`, buttons: { 'Move to Trash': () => { remotes.forEach((view) => { if (!view) return; const dir = Path.dirname(view.item.remote).replace(/\\/g, '/'); const parent = remoteftp.treeView.resolve(dir); client.delete(view.item.remote, (err) => { if (!err && parent) { parent.open(); } }); }); }, Cancel: null, }, }); },
后
'remote-ftp:delete-selected': { enabled: true, command() { if (!hasProject()) return; const remotes = getRemotes('You need to select a folder first'); if (remotes === false) return; remotes.forEach((view) => { if (!view) return; const dir = Path.dirname(view.item.remote).replace(/\\/g, '/'); const parent = remoteftp.treeView.resolve(dir); client.delete(view.item.remote, (err) => { if (!err && parent) { parent.open(); } }); }); // atom.confirm({ // message: 'Are you sure you want to delete the selected item ?', // detailedMessage: `You are deleting:${remotes.map(view => `\n ${view.item.remote}`)}`, // buttons: { // 'Move to Trash': () => { // remotes.forEach((view) => { // if (!view) return; // // const dir = Path.dirname(view.item.remote).replace(/\\/g, '/'); // const parent = remoteftp.treeView.resolve(dir); // // client.delete(view.item.remote, (err) => { // if (!err && parent) { // parent.open(); // } // }); // }); // }, // Cancel: null, // }, // }); }, },
我能够实施这个临时修复并且它有效。
如果其他人使用它,请小心,因为删除是即时的(没有确认/提示弹出框要求您验证您的操作),并且正如另一个用户建议的那样,当 Atom 1.54.0(或更高版本)发布时,您要记住撤消此编辑。
答案2
对整个块进行注释,没有用,因为它不调用 delete 方法。但有助于指出问题所在。因此请使用这个;请注意添加了一行代码。:
'remote-ftp:delete-selected': {
enabled: true,
command() {
if (!hasProject()) return;
const remotes = getRemotes('You need to select a folder first');
if (remotes === false) return;
// atom.confirm({
// message: 'Are you sure you want to delete the selected item ?',
// detailedMessage: `You are deleting:${remotes.map(view => `\n ${view.item.remote}`)}`,
// buttons: {
// 'Move to Trash': () => {
remotes.map(view => `\n ${view.item.remote}`); // remove after bug is fixed
remotes.forEach((view) => {
if (!view) return;
const dir = Path.dirname(view.item.remote).replace(/\\/g, '/');
const parent = remoteftp.treeView.resolve(dir);
client.delete(view.item.remote, (err) => {
if (!err && parent) {
parent.open();
}
});
});
// },
// Cancel: null,
// },
// });
},
},