想知道是否有最好的方法来调用目录名称并从列表中作为参数进行迭代。
例子
cat /dropbox/script/DirList.txt
DIR_A
DIR_B
DIR_C
DIR_D
/dropbox/dev/inbox/<DIR_A>/ *.*
/dropbox/dev/inbox/<DIR_B>/ *.*
/dropbox/dev/inbox/<DIR_C>/ *.*
/dropbox/dev/inbox/<DIR_D>/ *.*
考虑文件夹/目录已经存在如果文件存在于每个提到的目录中,则将它们移动到发件箱
mv /dropbox/dev/inbox/<DIR_D>/ *.* to /dropbox/dev/outbox/<DIR_D>/ *.*
我试过
if [ -d /dropbox/dev/inbox/<DIR_D>/ ]; then
mv /dropbox/dev/inbox/<DIR_D>/ *.* to /dropbox/dev/outbox/<DIR_D>/
fi
答案1
像这样的东西应该适用于循环文件中的行:
while read dir_name; do
cp -pR /dropbox/dev/inbox/$dir_name/* /dropbox/dev/outbox/$dir_name/
done < /dropbox/script/DirList.txt
mkdir -p /dropbox/dev/outbox/$dir_name
如果发件箱目录尚不存在,您可能需要一个。
答案2
如果我理解正确的话,这应该可行。请注意,“*.*”仅匹配名称中带有句点的文件(与 Windows 不同,它匹配所有文件)。
#!/bin/sh
INBOX=/dropbox/dev/inbox
OUTBOX=/dropbox/dev/outbox
for d in $(cat /dropbox/script/DirList.txt); do
if [ -d $INBOX/$d ]; then
mkdir -p $OUTBOX/$d
mv $INBOX/$d/* $OUTBOX/$d/
fi
done