如何使用pwd作为文件名

时间:2015-03-26 14:00:38

标签: bash

我需要浏览一整套子目录,每次找到一个名为0的子目录时,都必须进入它。在那里,我需要执行tar命令来压缩一些文件。

我尝试了以下

find . -type d -name "0" -exec sh -c '(cd {} && tar -cvf filename.tar ../PARFILE RS* && cp filename.tar ~/home/directoryForTransfer/)' ';'

似乎有用。但是,因为这是在名为0的许多目录中完成的,所以它将始终覆盖以前的filename.tar(并且我将丢失有关其创建位置的信息)。

解决这个问题的一种方法是使用$ pwd作为文件名(最后是+ .tar)。

我尝试了双嘀嗒,反叛等,但我从未设法获得正确的文件名。

"$PWD"".tar", `$PWD.tar`, etc 

有什么想法吗?任何其他方式都可以,只要我可以将文件的名称与它创建的目录链接起来。

我需要这样才能轻松地将directoryToTransfer从群集传输到我的家用电脑。

2 个答案:

答案 0 :(得分:1)

您可以尝试"${PWD//\//_}.tar"。但是,您必须使用bash -c代替sh -c

修改

所以现在你的代码应该是这样的:

find . -type d -name "0" -exec bash -c 'cd {} && tar -cvf filename.tar ../PARFILE RS* && cp filename.tar ~/home/directoryForTransfer/"${PWD//\//_}.tar"' ';'

我个人并不喜欢-exec的使用find标记,因为它会降低代码的可读性,并为每个文件分配新进程。我会这样做,这应该工作,除非某个地方的文件名包含换行符(这是非常不可能的)。

while read dir; do
    cd {} && tar -cvf filename.tar ../PARFILE RS* && cp filename.tar ~/home/directoryForTransfer/"${PWD//\//_}.tar"
done < <(find . -type d -name "0")

但这只是我个人的偏好。 -exec变种也应该有用。

答案 1 :(得分:1)

您可以使用-execdir中的find选项在每个找到的目录中下载,然后运行tar命令以大大简化您的tar命令:

find . -type d -name "0" -execdir tar -cvf filename.tar RS* \;

如果您希望在~/home/directoryForTransfer/中创建tar文件,请使用:

find . -type d -name "0" -execdir tar -cvf ~/home/directoryForTransfer/filename.tar RS* \;