tro*_*ura 2 shell bash tar shell-script
假设我们要查找某个文件,对它们使用 tar 并删除它们。我尝试使用
touch "mycompress.bz2.tar"
find . \( -name "*.c" -o -name "*.sh*" \) -exec tar ujf "mycompress.bz2.tar" {} "+" \; -exec rm {} \;
Run Code Online (Sandbox Code Playgroud)
但是执行这个我的终端就关闭了。我怎样才能正确地实现这一点?
您的命令有几个问题。
第一个是压缩存档无法更新。您需要先创建一个未压缩的存档,更新它,最后压缩它。
第二个是tar语法不正确,第一个-exec子句应该使用+终止符或\;一个,但不能同时使用。
第三个更微妙,如果保留+终止符-exec就会发生,第二个子句将按顺序为每个文件执行,而第一个子句将等待保存的文件列表以填充要启动的环境字符串。发生这种情况时,第一个要存储的所有文件-exec都已被第二个删除,-exec因此tar将失败,您将丢失所有文件。
毫无疑问,您正在使用GNU tar,这里有一个简单的方法来实现您想要的:
tar --files-from <(find . \( -name "*.c" -o -name "*.sh*" \)) \
--remove-files -cjf mycompress.bz2.tar
Run Code Online (Sandbox Code Playgroud)
GNU tar 被记录为仅在保存文件后删除文件:
$ man gtar
...
--remove-files
remove files after adding them to the archive
...
Run Code Online (Sandbox Code Playgroud)
请注意,我建议的命令将无法处理带有嵌入新行的文件,但这应该是不太可能发生的事件。
| 归档时间: |
|
| 查看次数: |
354 次 |
| 最近记录: |