我需要一个脚本来查看目录中的文件并查看它是否存在于多个目录之一中。
我需要这样的东西:
for files in /downloads/ #may or may not be in a sub-directory
do
print if file exists in /media/tv, /media/movie, or /media/music
done
这些文件不会位于目录的根目录中。我不能只搜索 /media,因为我不想在 CD-ROM 或视频中搜索。
我正在使用最新版本的 Ubuntu 服务器。
答案1
答案2
/downloads
如果您遍历或/media
对于每个文件名,这可能会非常慢。因此,只需遍历每个层次结构一次,存储文件名列表,然后处理列表。
为简单起见,我假设您的文件名不包含任何换行符。
find /downloads -type f | sed 's!^.*/\(.*\)$!\1/&!' |
sort -t / -k1,1 >/tmp/downloads.find
find /media/tv /media/music /media/movie -type f |
sed 's!^.*/\(.*\)$!\1/&!' |
sort -t / -k1,1 >/tmp/media.find
此时,这两个.find
文件包含文件路径列表,前面带有文件名,按文件名排序。连接第一个分隔字段上的文件/
,并稍微清理一下结果。
join -j 1 -t / /tmp/downloads.find /tmp/media.find |
sed -e 's![^/]*/!!' -e 's![^/]*/! has the same name as !'
答案3
下面是 bash 中使用大括号扩展的实现:
the_file=foo.mp3
for file in /downloads/media/{tv,movie,music}/"$the_file"; do
if [[ -e $file ]]; then
printf '%s found in %s:\n' "$the_file" "${file%/*}"
fi
done
答案4
echo "Enter file name"
read file
flag=0
for i in 'ls'
do
if [ $i == $file ] ;then
echo "File exist"
flag=1
break;
fi
done
if [ $flag == 0 ] ;then
echo "File not exist"
fi