1

I'm trying to write a shell script in which I recursively copy a directory to a USB stick. I need the return value of the copy operation for error-checking purposes. I've tried

cp -a /var/mydir /media/usbdrive

and

cp -r /var/mydir /media/usbdrive

as well as a few others, but the problem is that I always get errors such as:

Cannot create fifo: /path/to/fifo Operation not permitted

Whilst these are warnings and the copy operation continues, I get a non-successful error code returned from the operation which messes up the error handling in my script. How can I copy recursively and ignore fifos, symlinks, and other entities that are not valid on a FAT32 file system?

1 Answer 1

2

You should be able to do this using the find command. The -type option allows you to restrict the kinds of files you find, so you can ignore symlinks and pipes etc., and the -exec option allows you to run a command for each of the files you find.

First create all the directories on the USB stick:

cd /var/mydir
find * -type d -exec mkdir /media/usbdrive/{} \;

Then copy all the plain files:

cd /var/mydir
find . -type f -exec cp {} /media/usbdrive/{} \;
1
  • Also works well on Kingston USB stick in this location + usefull to batch test these damned small storage devices with default FAT 32 FS, on Linux. Thank you @Dave Webb
    – tuk0z
    Sep 5, 2015 at 19:44

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .