我不小心将文件解压缩到了错误的目录中,实际上有数百个文件......现在该目录与原始文件和错误的解压缩文件搞混了。我想选择解压缩的文件并使用shell脚本删除它们,例如
$unzip foo.zip -d test_dir
$cd target_dir
$ls test_dir | rm -rf
什么都没发生,没有文件被删除,我的命令出了什么问题?谢谢!
答案 0 :(得分:6)
到目前为止,以下脚本比其他答案有两个主要好处:
ls
会在空格上中断)while read -r _ _ _ file; do
arr+=("$file")
done < <(unzip -qql foo.zip)
rm -f "${arr[@]}"
答案 1 :(得分:1)
正确的方法是使用xargs:
$find ./test_dir -print | xargs rm -rf
已编辑感谢SiegeX向我解释OP问题。
来自测试目录的“读取”错误文件并将其从目标目录中删除。
$unzip foo.zip -d /path_to/test_dir
$cd target_dir
(cd /path_to/test_dir ; find ./ -type f -print0 ) | xargs -0 rm
我使用find -0
因为文件名可以包含空格和换行符。但如果不是这样,您可以使用ls
:
$unzip foo.zip -d /path_to/test_dir
$cd target_dir
(cd /path_to/test_dir ; ls ) | xargs rm -rf
在执行之前,您应该通过rm
echo
的脚本
答案 2 :(得分:1)
尝试
for file in $( unzip -qql FILE.zip | awk '{ print $4 }'); do
rm -rf DIR/YOU/MESSED/UP/$file
done
unzip -l
列出了有关压缩文件的大量信息。你只需要从中获取文件名。
编辑:使用SiegeX建议的-qql
答案 3 :(得分:0)
这样做:
$ ls test_dir | xargs rm -rf
答案 4 :(得分:0)
您需要ls test_dir | xargs rm -rf
作为最后一个命令
rm
不从stdin获取输入,因此您无法将文件列表传递给它。 xargs
获取ls
命令的输出并将其显示为rm
作为输入,以便它可以删除它。
答案 5 :(得分:0)
压缩前一个。在/ DIR / YOU / MESSED / UP
中运行此命令unzip -qql FILE.zip | awk '{print "rm -rf " $4 }' | sh
享受
答案 6 :(得分:0)
以下为我工作(bash)
unzip -l filename.zip | awk '{print $NF}' | xargs rm -Rf