假设我有一堆*.tar.gz
个文件位于文件夹层次结构中。找到这些文件的好方法是什么,然后在其上执行 多个 命令。
我知道如果我只需要在目标文件上执行一个命令,我可以使用这样的东西:
$ find . -name "*.tar.gz" -exec tar xvzf {} \;
但是如果我需要在目标文件上执行多个命令呢?我必须在这里写一个bash脚本,还是有更简单的方法?
需要执行A.tar.gz
文件的命令示例:
$ tar xvzf A.tar.gz # assume it untars to folder logs
$ mv logs logs_A
$ rm A.tar.gz
答案 0 :(得分:1)
编写shell脚本可能最简单。看看sh for loops。您可以use the output of a find command in an array,然后遍历该数组以对每个元素执行一组命令。
例如,
compatibility_level
答案 1 :(得分:1)
这对我有用(感谢Etan Reisner的建议)
#!/bin/bash # the target folder (to search for tar.gz files) is parsed from command line
find $1 -name "*.tar.gz" -print0 | while IFS= read -r -d '' file; do # this does the magic of getting each tar.gz file and assign to shell variable `file`
echo $file # then we can do everything with the `file` variable
tar xvzf $file
# mv untar_folder $file.suffix # untar_folder is the name of folder after untar
rm $file
done
根据建议,the array way如果文件名包含空格则不安全,并且在这种情况下似乎也无法正常工作。