在linux

时间:2015-10-02 18:24:13

标签: linux bash

我知道在使用cp时,此网站上有一个用于创建目录的帖子,但我的问题有点不同。 我想在linux中的新目标中复制一个文件,但路径的某些部分可能不存在,我想知道是否可以创建该路径而不将目录名与文件名分开,例如,想象我有一个包含新文件$prefixdir前缀的变量,我希望在该位置复制每个文件。

prefixdir=/home/akj/newpath
list="$(ls /somelocation...)"
for l in $list
do
   cp -v $l "$prefixdir$l"
done

从示例中可以看出,在新位置下可能存在一些不存在的目录,并且由于文件名,我无法使用mkdir "$prefixdir$l"。我知道我可以将文件名与目录名分开,然后使用mkdir,但我想知道是否有一种优雅的方法来做到这一点。

编辑:

为了澄清我的问题,想象一下我想要复制/lib/tt/test.so而我的$prefixdir/home/akj/。还想象lib/tt不存在,所以我的cp命令会失败。由于路径中的mkdir -p,我也无法使用test.so

感谢。

1 个答案:

答案 0 :(得分:1)

如果你有Gnu coreutils(通常你会在Linux上),你可以使用:

install -m 0644 -D source_file dest_filename

自动创建必要的目录。

-m 0644标志将新文件的权限设置为0644(rw-r--r--);你需要它,因为默认是将权限设置为rxwr-xr-x(假设文件应该是可执行的,因为这是通常的用例),而不是复制原始文件的权限。