将多个文件移动到保留路径的新目录

时间:2015-06-04 21:42:32

标签: bash awk

我希望将当前目录中的大量文件移到新目录中,同时保留其原始路径(例如example/app1/main.c应移至/newdir/example/app1/main.c)。

我通过创建了所有必要的目录。以下内容:

git ls-files --others | awk -F '/' '{print "/home/user/newdir/"$1"/"$2}' | xargs mkdir -p

但我不确定如何强制mv在确定新位置时使用git ls-files --others目录路径。

1 个答案:

答案 0 :(得分:1)

我通常这样做的一种方法是使用tar,因为它非常擅长保存文件。

tar -c -f - $(git ls-files --other) | tar -x -f - -C /newdir && git clean -df

或类似的东西应该是你想要的。第一个tar在stdout上创建一个tar,由第二个读取;第二个将它提取到目的地。之后,我们需要删除文件,因此git clean。

请注意,如果您有许多文件,则可以将第一个tar拆分为两部分:

git ls-files > /tmp/files && tar -c -f - -T /tmp/files ...