使用tar同步文件夹而不重新创建tar

时间:2015-03-23 17:41:43

标签: bash sh tar

我正在尝试编写一个脚本,使tar与文件夹保持同步。我正在处理大量文件,并且不想在每次运行脚本时重新制作tar。我希望它只添加/删除自上次脚本运行以来已从文件夹中添加/删除的tar中的文件。这就是我所拥有的。

# Create tar if it doesn't exist but don't over write if it does exist
touch -a /home/MyName/data.tar

cd /home/MyName

# Make the tar
tar -uv --exclude='dirToTar/FileIWantToExclude' -f $tarFile dirToTar

这适用于添加文件。但是,如果从dirToTar删除某个文件,则该文件不会从data.tar中删除。

2 个答案:

答案 0 :(得分:0)

如果文件稀疏,也可以使用tar的 -S 选项。

答案 1 :(得分:0)

不幸的是,tar只是不支持此功能。或者,您可以使用zip,如下所示:

class DetailScreen extends StatelessWidget {
  // Declare a field that holds the Todo.
  final Elevator elevator;

  // In the constructor, require a Todo.
  DetailScreen({Key key, @required this.elevator}) : super(key: key);

  Future _changeStatus(Elevator  elevator) async {
    //Fetch the data from the api
    // ignore: non_constant_identifier_names
    var id = elevator.id.toString();
    var holder = id.toString();
    var url = 'https://rocketcrybaby.azurewebsites.net/api/elevators/'+holder;
    var response = await http.put(
        url, body: {'status': '${_statusController.text}'});
    if (_statusController.text != "active"|| _statusController.text != "inactive"){
      return "Error not a valid status !";
    }
    print('Response status: ${response.statusCode}');
    print('Response body: ${response.body}');

    //print(await http.read('https://example.com/foobar.txt'));
   return "sucess";
  }



  @override
  Widget build(BuildContext context) {
    // Use the Todo to create the UI.
    return Scaffold(
      appBar: AppBar(
        title: Text("Elevator # " +elevator.id.toString()),
      ),
      body: Center(
        child: Center(
          child: TextField(
            controller: _statusController
          ),
        )
      ),
      floatingActionButton: FloatingActionButton(onPressed: () async => [ await _changeStatus(elevator), print(elevator.status)]),


    );
  }

并非您所要求的“ tar”,但它确实可以很好地工作。另一种选择是使用7z(7-zip存档程序),它可以为您提供更好的压缩效果。这样做的命令行选项比较晦涩,但这有效:

zip -r -FS myArchiveFile.zip dirToZip

(我在这里找到了这些7z命令行选项的文档:https://www.scottklement.com/p7zip/MANUAL/switches/update.htm。我不知道为什么这么难找到这份文档...)。

如果由于某种原因,您不希望zip或7z提供压缩功能,那么也可以禁用它,因此zip或7z就像tar一样创建文件容器。

不过,最后,我认为您应该每次都重新创建存档。我怀疑执行您要求的同步所节省的时间可能很小。