我正在尝试编写一个 shell 脚本,在其中以递归方式将目录复制到 USB 记忆棒。我需要复制操作的返回值以进行错误检查。我试过
cp -a /var/mydir /media/usbdrive
和
cp -r /var/mydir /media/usbdrive
以及其他一些,但问题是我总是收到如下错误:
Cannot create fifo: /path/to/fifo Operation not permitted
虽然这些是警告并且复制操作继续,但我从操作中返回了一个不成功的错误代码,这弄乱了我的脚本中的错误处理。我如何才能递归复制并忽略 fifo、符号链接和其他在 FAT32 文件系统上无效的实体?
答案1
您应该能够使用find
命令执行此操作。该-type
选项允许您限制找到的文件类型,因此您可以忽略符号链接和管道等,并且该-exec
选项允许您对找到的每个文件运行一个命令。
首先在 USB 上创建所有目录:
cd /var/mydir
find * -type d -exec mkdir /media/usbdrive/{} \;
然后复制所有纯文本文件:
cd /var/mydir
find . -type f -exec cp {} /media/usbdrive/{} \;