#file #unix #search #find
#файл #unix #Поиск #Найти
Вопрос:
Привет, у меня есть два каталога a1dir1 и a1dir2. Я хочу найти файлы, уникальные для каждого каталога. Это список обоих
$ ls -al ~david/a1dir1 --time-style=long-iso
total 56
drwxr-xr-x 4 david users 4096 2011-10-11 21:20 .
drwx--x--x 12 david users 4096 2011-10-03 16:42 ..
-rw------- 1 david users 60 2011-09-20 17:43 F3.DAT
-rw------- 1 david users 40 2011-09-20 17:43 f1
-rw------- 1 david users 270 2011-09-20 17:43 f2.c
-rwx------ 1 david users 7539 2011-09-20 17:43 make.socket
-rw------- 1 david users 418 2011-09-20 17:43 make.socket.c
-rw------- 1 david users 11843 2011-09-20 17:43 prog1
-rw------- 1 david users 138 2011-09-20 17:43 prog1.c
lrwxrwxrwx 1 david users 4 2011-10-11 21:17 s.link -> f2.c
drwx------ 2 david users 4096 2011-09-20 17:43 test1.dir
drwx------ 2 david users 4096 2011-09-20 17:43 test3.dir
srwx------ 1 david users 0 2011-10-11 21:18 unix.socket
$ ls -al ~david/a1dir2 --time-style=long-iso
total 192
drwxr-xr-x 5 david users 4096 2011-10-11 21:23 .
drwx--x--x 12 david users 4096 2011-10-03 16:42 ..
-rw------- 1 david users 39 2011-09-20 17:43 .hidden.file
-rw------- 1 david users 60 2011-09-20 17:43 F3.DAT
-rw------- 1 david users 40 2011-09-20 17:43 f1
-rw------- 1 david users 88 2011-09-20 17:43 file2
-rwx------ 1 david users 7539 2011-09-20 17:43 make.socket
-r-------- 1 david users 135838 2011-09-20 17:43 phones
-rw------- 1 david users 138 2011-09-20 17:43 prog1.c
-rw------- 1 david users 120 2011-09-20 17:43 prog2.c
lrwxrwxrwx 1 david users 4 2011-10-11 21:23 s.link -> f2.c
drwx------ 2 david users 4096 2011-09-20 17:43 test1.dir
drwx------ 2 david users 4096 2011-09-20 17:43 test2.dir
drwx------ 2 david users 4096 2011-09-20 17:43 test3.dir
(Я передаю a1dir1 и a1dir2 в качестве аргументов) Я пытался:
for file in $(ls -al $1)
do
find $2 -name "$file" 2> myerrors
done
хотя этот код просто выводит каждый файл в a1dir1?
Любая помощь будет с благодарностью принята 🙂
Ответ №1:
Без поиска пример может быть:
diff -q trunk tmp/trunk | grep -v Common | grep -v differ
Комментарии:
1. ну, дело в том, что это для задания, поэтому, поскольку мой профессор не преподавал вариант Common и different, я не могу их использовать. И я должен отформатировать вывод точно так, как он показывает. Я пытался около трех дней, но это трудно сделать так просто, поскольку он мало чему научил.
2. Извините, я не понимал, что это просто параметры, я привык видеть параметры в кавычках
Ответ №2:
Вы можете попробовать использовать diff
или dircmp
в зависимости от вашей ОС / доступного программного обеспечения. Вот пример с GNU Diff:
diff --brief dir1 dir2
Редактировать:
Из вашего комментария попробуйте следующее:
diff --brief dir1 dir2 |
cut -c 9- |
awk -F': ' '{print $1"/"$2}' |
while read filename
do
ls -ld $filename
done
Комментарии:
1. Я должен иметь возможность форматировать его точно так, как хочет мой профессор. Я попытался перечислить оба каталога и преобразовать их в файлы и использовать diff, но мне нужно отобразить всю информацию о каждом файле
2. @user614573, пожалуйста, ознакомьтесь с предложением, которое я сделал в разделе «Редактировать».
3. Что ж, спасибо, это работает лучше, но дело в том, что я не могу использовать «awk», поэтому это так сложно, потому что я не могу просто сравнить имена файлов с этим или «sed», как я пытался
Ответ №3:
Это не обрабатывает имена файлов с пробелами и не обрабатывает подкаталоги, но в любом случае должно работать лучше, чем ваш код:
for file in $(ls -A $1)
do
ls -l $2/$file 2>/dev/null
done
Комментарии:
1. Ну, это все еще не выводит правильные файлы, оно выдает F3.DAT, f1, make.socket, prog1.c и s.link -> f2.c Это была моя проблема на протяжении каждой из моих модификаций, я либо получаю слишком много файлов, либо их недостаточно. Например, файл F3.DAT, который я никогда не могу получить правильно
2. Даже если я перечисляю содержимое одного каталога в файл, я просматриваю каждый файл во втором каталоге и сопоставляю его имя с текстовым файлом, в нем говорится, что те, которые находятся внутри, не найдены
3. Извините, я пропустил ваши требования и просто попытался исправить ваш скрипт.