目录A中缺少文件但存在于目录B中

时间:2018-01-24 10:34:27

标签: bash shell

我正在尝试创建:

  • 包含b中存在但缺少b
  • 的文件的列表
  • 包含b中但在
  • 中缺失的文件的列表

到目前为止,这是我的代码:

#!/bin/sh

set -e

A_DIR_1=/tmp/1
A_DIR_2=/tmp/2
A_DIR_3=/tmp/3    
B_DIR_1=/tmp/1
B_DIR_2=/tmp/2
B_DIR_3=/tmp/3

for i in {1..3}
do
   A="A_DIR_$i"
   B="B_DIR_$i"
   if [ d ${!A} ]; then
      bash -c 'diff -u <(find "${!B}" |sed "s:${!B}::") <(find "${!A}" |sed "s:${!A}::") |sed "/^+\//!d; s::${!A}/:"' >> /tmp/fileA
      bash -c 'diff -u <(find "${!A}" |sed "s:${!A}::") <(find "${!B}" |sed "s:${!A}::") |sed "/^+\//!d; s::${!B}/:"' >> /tmp/fileB
   fi
 done

然而,当我运行它时,我收到以下错误:find: cannot search : No such file or directory'。为什么是这样?目录肯定存在。

1 个答案:

答案 0 :(得分:2)

mm,你的代码难以实现。

如果我清楚地了解你,那可以提供帮助:

准备:

mkdir /tmp/dir1
mkdir /tmp/dir2
touch /tmp/dir1/test{1..12}
touch /tmp/dir2/test{1..15}
touch /tmp/dir1/test{22..25}

代码:

#!/bin/bash

dir1=/tmp/dir1
dir2=/tmp/dir2


diff_result=$(diff -u "${dir1}" "${dir2}")
echo "${diff_result}" | grep "${dir1}" | awk '{print $NF}' > /tmp/files_only_in_dir1
echo "${diff_result}" | grep "${dir2}" | awk '{print $NF}' > /tmp/files_only_in_dir2

输出:

$ cat /tmp/files_only_in_dir1 
test22
test23
test24
test25
$ cat /tmp/files_only_in_dir2
test13
test14
test15