使用find和xarg创建目录

时间:2017-05-29 20:51:01

标签: linux bash shell

我的想法是在路径$ 1中找到所有.tar文件,然后通过xargs创建一个与路径$ dirr中的.tar文件同名的目录,该目录从控制台读取。 现在这个代码在我写当前位置(./)但是对于/ home / user等路径时有效。它不会 知道如何使这个代码工作吗?

read -p "Enter destination path:" dirr
find "$1" -maxdepth 1 -name "*.tar" -exec basename {} \; | xargs mkdir -p "$dirr"

1 个答案:

答案 0 :(得分:1)

如果您要查找的是为特定目录中的每个tar文件生成目录,那么在-exec中运行shell会怎么样?

read -p "Enter destination path:" dest
[ -d "$dest" ] || exit 1
find "$dest" -maxdepth 1 -name "*.tar" -exec sh -c 'mkdir -p "${0%.tar}"' {} \;

或者,如果你想在shell中单独执行此操作,可能会执行for循环:

for tarfile in "$dest"/*.tar; do
  mkdir -p "${tarfile%.tar}"
done

请注意,如果目标目录中不存在tar文件,这可能会产生有趣的结果。