![]() |
|
|
google unix.com
|
|||||||
| Forum | Registrera | Forum Regler | Länkar | Album | FAQ | Medlemslista | Kalender | Söka | Dagens inlägg | Markera forum som lästa |
| Shell-programmering och Skript Post frågor om ksh, CSH, SH, bash, PERL, PHP, sed, awk och andra skalskript och skal skriptspråk här. |
Mer UNIX och Linux Forum Ämnen Du kan hitta Helpful
|
||||
| Tråd | Thread Starter | Forum | Svar | Senaste Inlägg |
| MGET * (obtein filer från aktuell katalog men inte filerna form sub-kataloger) | Peter321 | Shell-programmering och Skript | 0 | 03-12-2009 11:59 |
| jämföra db zon filer i 2 kataloger | richsark | Shell-programmering och Skript | 2 | 03-05-2009 11:05 |
| hur många kataloger och filer som finns i en katalog | smongam | Shell-programmering och Skript | 4 | 01-22-2009 02:47 |
| Jämför filer från två kataloger | ravi214u | Shell-programmering och Skript | 2 | 07-14-2008 08:04 |
| Hur kan man jämföra två platta filer och få ändrade uppgifter | jtshashidhar | Shell-programmering och Skript | 3 | 01-29-2006 10:26 |
![]() |
|
|
LinkBack | Thread Tools | Sök i denna tråd |
Omdöme:
|
Visningslägen |
|
|
|
||||
|
jämför filerna i två kataloger och produktionen förändrats filer till tredje katalog
Jag har sökt ungefär 30 trådar, en belastning på Google-sidor och kan inte hitta vad jag söker. Jag har några av de delar men inte hela. Jag verkar inte gå att få pusslet att passa ihop.
Jag har tre mappar, varav två innehåller olika versioner av flera filer, dist/file1.php dist/file2.php etc och dist_old/file1.php dist_old/file2.php etc. Den tredje mappen innehåller bara ändrade filer mellan de två. Om / dist/file1.php avviker från / dist_old/file1.php sedan en fil som heter dist_upgrade/file1.php existerar med samma innehåll som dist/file1.php. För närvarande är jag manuellt hantera de olika filer med WinMerge och jag skulle vilja automatisera en del av denna om möjligt. Vad jag skulle vilja göra är att jämföra dist mappen med dist_old mappen då har filer som inte är samma kopieras till dist_upgrade / file.ext behålla mappstrukturen och fullständiga innehållet i den nya filen i mappen dist. Tack för alla råd, Vänliga hälsningar, Brandon |
|
||||
|
Detta kan vara användbart Kod:
#!/bin/sh
cd dist
for a in `ls`; do
if [ ! -f "../dist_old/$a" ]; then
continue
fi
diff $a ../dist_old/$a > /dev/null
if [[ "$?" == "1" ]]; then
cp $a ../dist_upgrade
fi
done
Senast redigerad av edgarvm; 05-26-2009 at 07:35.. |
|
||||
|
Liknande edgarvm talet, men klara nya filer samt olika sådana ... Kod:
new=/dist
old=/dist_old
diff=/dist_upgrade
cd $new
for f in *f
do
# Diff the files - ignore the output...
diff $f $old > /dev/null 2>&1
# ...but get the status
status=$?
if [ $status -eq 0 ] ; then
# Files are identical - don't copy the file
echo $f unchanged
elif [ $status -eq 1 ] ; then
# Files differ - copy new file
echo $f changed
cp $f $diff
elif [ $status -eq 2 ] ; then
# Old file doesn't exist - copy new file
echo old $f does not exist
cp $f $diff
fi
done
Du kommer verkligen få en status 2 om en fil finns men är oläslig också, men jag har ignorerat det som ni kan göra allt läsbar innan du börjar! |
|
||||
|
Tack för de svar ni är top notch. Jag har gjort några ändringar för att få detta arbetar rekursivt med edgarvm exempel. Jag har också fört JerryHone idé om att ta itu med icke-existerande filer Kod:
#!/bin/bash
# setup folders for our different stages
DIST=/var/www/localhost/htdocs/dist/
DIST_OLD=/var/www/localhost/htdocs/dist_old/
DIST_UPGRADE=/var/www/localhost/htdocs/dist_upgrade/
cd $DIST
list=`find . -type f`
for a in $list; do
if [ ! -f "$DIST_OLD$a" ]; then
cp --parents $a $DIST_UPGRADE
continue
fi
diff $a $DIST_OLD$a > /dev/null
if [[ "$?" == "1" ]]; then
# File exists but is different so copy changed file
cp --parents $a $DIST_UPGRADE
fi
done
Tack för råd. Hälsningar, Brandon Senast redigerad av bkeep; 05-26-2009 at 10:04.. Orsak: Fick det att arbeta med ovanstående kod |
|
||||
|
Tack ni bidrog detta script mig mycket! men idag fick jag veta att det inte kan hantera mellanslag i filnamn ordentligt så jag modifierade den lite hjälp av råd från här: Unixjunkie Blog: Hantering filnamn med Spaces skriptet verkar behandla sådana filer korrekt (även om jag inte testa det för mycket): Kod:
#!/bin/bash
# setup folders for our different stages
DIST=/var/www/localhost/htdocs/dist/
DIST_OLD=/var/www/localhost/htdocs/dist_old/
DIST_UPGRADE=/var/www/localhost/htdocs/dist_upgrade/
cd $DIST
find . -type f | while read filename
do
if [ ! -f "$DIST_OLD$filename" ]; then
cp --parents "$filename" $DIST_UPGRADE
continue
fi
diff "$filename" "$DIST_OLD$filename" > /dev/null
if [[ "$?" == "1" ]]; then
# File exists but is different so copy changed file
cp --parents $filename $DIST_UPGRADE
fi
done
skål! |