我知道在使用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
。
感谢。
答案 0 :(得分:1)
如果你有Gnu coreutils(通常你会在Linux上),你可以使用:
install -m 0644 -D source_file dest_filename
自动创建必要的目录。
-m 0644
标志将新文件的权限设置为0644(rw-r--r--
);你需要它,因为默认是将权限设置为rxwr-xr-x
(假设文件应该是可执行的,因为这是通常的用例),而不是复制原始文件的权限。