我有两个文件夹“downloads”和“files”。我想将所有.txt文件从表单下载到文件。在将它们移动到文件夹之前,我检查它是否已存在于“files”文件夹中。如果不存在,那么我将移动它们。
但由于某些原因,我的脚本总是返回文件不存在。
#!/bin/sh
SOURCE_PATH="/Users/johnqin/Downloads/*.txt"
DEST_PATH="/Volumns/files/"
ls -l $SOURCE_PATH > /dev/null 2>&1
# check if there are any .txt files
if [ "$?" = "0" ]; then
# loop through all .txt files
for file in $SOURCE_PATH
do
# get only file name
fname=`basename $file`
#echo $fname
targetFile="$DEST_PATH$fname"
# echo $targetFile
# check if this file exist in the target folder
if [ -e "$targetFile" ]
then
echo "$fname exists, do nothing"
# will do nothing
else
echo "$fname does not exist, move the file over"
# will move file over
fi
done
else
echo "did not find file"
fi
更新
我想我知道问题所在。我的代码很好。 “/ Volumns / files”文件夹是另一个Ubuntu服务器上的共享文件夹。我登录时自动挂载此文件夹。该文件夹的地址是“smb:// ubuntunas / files”。
仍然需要弄清楚为什么我的代码适用于其他文件夹但不适用于此文件。
答案 0 :(得分:1)
紧凑版(注意find ... -maxdepth 1
和cp -nv
)
代码:
#!/bin/bash
set -eu
readonly source=/home/bobah
readonly destination=/home/bobah/tmp
while read line; do
echo 'name: ['${line}'], basename: ['${line##*/}']'
cp -nv ${line} ${destination}
done < <(find ${source} -maxdepth 1 -name '*.cpp')
输出:
name: [/home/bobah/abc.cpp], basename: [abc.cpp]
name: [/home/bobah/test.cpp], basename: [test.cpp]
`/home/bobah/test.cpp' -> `/home/bobah/tmp/test.cpp'