bash - Shell:复制具有完整文件夹结构的文件列表,从文件名中剥离 N 个前导组件

标签 bash shell mintty

考虑类似于(但不限于)

的文件列表(例如 files.txt)
/root/
/root/lib/
/root/lib/dir1/
/root/lib/dir1/file1
/root/lib/dir1/file2
/root/lib/dir2/
...

如何使用 a) 完整的文件夹结构但是 b) 从路径中剥离了 N 个文件夹组件(在示例中只是 /root/)?

我已经设法使用了

cp --parents `cat files.txt` ~/destination

复制具有完整文件夹结构的文件,但是这会导致所有文件以 ~/destination/root/... 结尾,而我想将它们放在 中~/目的地/...

最佳答案

我想我通过使用 GNU tar 找到了一个非常好的简洁的解决方案:

tar cf - -T files.txt | tar xf - -C ~/destination --strip-components=1

注意 --strip-components 选项允许从文件名的开头删除任意数量的路径组件。

但有一个小问题:tar 似乎总是“压缩”files.txt 中提到的文件夹的全部内容(至少我找不到一个选项来忽略文件夹),但这最容易使用 grep 解决:

cat files.txt | grep -v '/$' > files2.txt

关于bash - Shell:复制具有完整文件夹结构的文件列表,从文件名中剥离 N 个前导组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43619894/

相关文章:

macos - 协助使用安全授权或特权执行

heroku - 无法使用 mintty 登录 heroku

Windows 10 上的 Bash 无法正常工作

linux - 备份 bash 脚本的第一个参数

linux - 如何在变量中嵌套变量?

linux - 只需键入其名称即可执行的 Shell 脚本

string - 在常量字符串上应用 bash 字符串运算符

bash - 任何使用 tail 获取最后一个值之前的值的方法(或不知道总行数的其他值)

c - Ncurses,如果我在 C 中调整终端窗口的大小,则会出现空屏幕

shell - 如何从 git for windows 在 mintty-bash 上完成 docker 'objects'