• Reset your password

User account menu

  • Artikler
  • Forside
  • Forum
  • Nyheder
  • Log in
Hjem
Linuxin 2025

Breadcrumb

  • Hjem
  • forums
  • Hjælp til bash script

Hvad kan du med 100% sikkerhed sige, at du har stemt?

Valgmuligheder
Af sorenwp | 22.03.2017 21:52

Hjælp til bash script

Programmering

Nogen der kan hjælpe med et lille bash script?



vil gerne den finder alle filer i mappen directory1, der efter skal den se hvilket af de filer som findes i directory2, og tilsidst de filer som findes begge steder skal slettes i directory2





Har selv prøvet, men må indse at mine linux skills ikke rekker :P

- men håber jeg er inde på noget af det rigtigt, det bare lige med at få sat det hele sammen.





find /home/user/directory1, / -type f -exec [ -f /home/user/directory2/{} ] && rm " /home/user/directory2/{}" || echo "file exists only in directory1" \;

  • Log in to post comments

Kommentarer9

8 år 1 måned siden

Permalink

Indsendt af frogmaster den 23. marts 2017 kl. 00:53

Permalink

Alt efter om du ønsker at

Alt efter om du ønsker at lære bash, finde dublerede filer/mapper eller begge ting, så kik lidt på disse link:



fslint, fdupes etc.: https://www.howtogeek.com/201140/how-to-find-and-remove-duplicate-files…



find command: http://unix.stackexchange.com/questions/122170/remove-duplicate-files-i…



Det er farligt at slette filer fra bash med mindre du har backup.

  • Log in to post comments

8 år 1 måned siden

Permalink

Indsendt af mich den 23. marts 2017 kl. 01:55

Permalink

Alt hvad du ønsker ...

Det er farligt at slette filer fra bash med mindre du har backup.

eller ved nøjagtig, hvad du gør - og det ved de færreste af os. :-(



Advanced Bash-Scripting Guide: http://www.tldp.org/LDP/abs/html/

Bash Reference Manual: http://www.faqs.org/docs/bashman/bashref.html

Bash scripting Tutorial: https://linuxconfig.org/bash-scripting-tutorial



Du kan nok finde svar på de fleste af dine spørgsmål i disse links.



Og jeg ville altid - som i *A*L*T*I*D* - prøve sådan et script på et test-dir.

Opret ~/test, ~/test/dir1, ~/test/dir2 og kopier repræsentative filer til hhv. dir1 og dir2 og afprøv dit script på dem. Det kan altid gentages, men det kan det ikke, hvis du kører scriptet på de originale directories.


  • Log in to post comments

8 år 1 måned siden

Permalink

Indsendt af sorenwp den 23. marts 2017 kl. 12:00

Permalink

lige nu er maskinen kun en

lige nu er maskinen kun en test maskine, så ingen ting kan blive slettet som ikke må :)

  • Log in to post comments

8 år 1 måned siden

Permalink

Indsendt af mrbrown79 den 23. marts 2017 kl. 12:26

Permalink

Til den opgave opgave

#0:



Til den opgave opgave ville jeg droppe drømmen om en "vanvids-oneliner" og bygge et rigtigt script og en for-løkke istedet.



Eksempelvis:

--

#!/bin/bash

srcdir="./src"

chkdir="./chk"



for chkfile in `find $srcdir -type f`

do

chkfileName=`basename $chkfile`

echo "Searching for $chkfileName"

find $chkdir -name $chkfileName -ok rm {} \;

done

--



Men test det godt igennem hvis du slipper det løs på filer med mellemrum og specialkarakterer. Så skal outputs formentlig termineres noget bedre end ovenfor.



Hvis den relative sti betyder noget (og ikke kun filnavn), så brug "-path" istedet for "-name"

  • Log in to post comments

8 år 1 måned siden

Permalink

Indsendt af frogmaster den 24. marts 2017 kl. 11:57

Permalink

#0Husk at samme fil kan

#0



Husk at samme fil kan have flere navne og flere filer kan have samme navn.



Tjek om dit bash kontrollere på navn eller fil størrelse. fslint skelner så vidt jeg ved.



Et andet program der kan finde dubs er finddub fra pakken perforate, der iøvrigt er noget gammelt skidt.

sudo apt-get install perforate



For at understrege alvorligheden ved at slette filer med bash script, iht #2 og #4 's kommentarer, og iøvrigt på baggrund af #4 's glimrende script, så har jeg hurtigt brygget videre på et eksempel på hvor farligt det er.



Jeg har ikke #4 's erfaring i bash scripting ... Hvis du ønsker mere forklaring, så er det formentlig ham du skal have fat i.



#!/bin/bash



# This TEST bash check for dublicate file names.

# Remember the differences on upper- and lowercase letters in UNIX/Linux.



echo

echo -e "\033[1;31mWARNING! \033[1;96mReally? \033[1;33mYou gotta be crazy to run this script on valuable data...



Understand that this script check simultaneously file names ONLY, NOT simultaneously files and You're in danger for fucking up stuff whereever You run it...\033[0m"

echo

echo -e "\033[1;33mBefore you continue \033[1;31mbone head\033[1;33m, You'll need to change the folder names within this script, to fit the names on folders You wanna delete doublet files within, as these folder names probably not excist.



NOTE however, the wildcard \033[1;31m'*' \033[1;33mis used to \033[1;31mRECURSIVELY \033[1;33mdefine all folder and file names, including the folder that containing this script, which makes it stupidly dangerous as an eksample on what NOT to do. \033[1;31mYOU HAVE BEEN WARNED!\033[0m"

echo



# Change the directory names below. NOTE: "./" need to be infront.

srcdir="./*"

chkdir="./*"



# Back quote (referred to as an acute, grave, grave accent, left quote, open quote, or a push) [`] is used below. it's not an apostrof.

for chkfile in `find $srcdir -type f`

do

chkfileName=`basename $chkfile`

echo "Searching for $chkfileName"

echo

echo -e "Push \033[1;31my\033[0m and \033[1;31mEnter\033[0m (WARNING) to delete the file below. \033[1;31mEnter\033[0m to abort any deletings."

find $chkdir -name $chkfileName -ok rm {} \;

done

$SHELL











  • Log in to post comments

8 år 1 måned siden

Permalink

Indsendt af phoenix den 26. marts 2017 kl. 23:22

Permalink

finde fælles filer i to mapper

En simpel måde at finde fælles filer i to mapper er med comm



comm -12 <(ls directory1/) <(ls directory2/)



Parametren -12 fortæller at vi vil have de elementer der findes i begge filer

  • Log in to post comments

8 år 1 måned siden

Permalink

Indsendt af marlar den 27. marts 2017 kl. 21:12

Permalink

Når jeg skal finde

Når jeg skal finde dubletter bruger jeg Total Commander. Det er godt nok til Windows, men fungerer fint under Wine. Især med mine mods som gør det lettere at have med Linux' filsystem at gøre.



Total Commander er verdens bedste filhåndtering. Og den har verdens bedste dubletfinder.

  • Log in to post comments

8 år 1 måned siden

Permalink

Indsendt af frogmaster den 28. marts 2017 kl. 16:24

Permalink

En simpel måde at finde

#6: En simpel måde at finde fælles filer i to mapper er med comm



Den er rigtig god, især med en lille ændring:



#!/bin/bash

# Scan for doublets

comm -12 <(ls */*) <(ls */*)

$SHELL

  • Log in to post comments

8 år 1 måned siden

Permalink

Indsendt af frogmaster den 2. april 2017 kl. 17:17

Permalink

#0Hvis det mere handler om

#0



Hvis det mere handler om at lære bash, så prøv med noget der ikke er farligt. Der er mange eksempler på nettet der kan skubbe dig igang. Der er lavet glimrende oneliners der kan finde dubletter skrevet i andet end bash, så der er ikke grund til at genopfinde den dybe tallerken.



Et rimeligt primitivt og ufarligt eksempel, der på Ubuntu og derivater (tjekket med 14.04 og 16.04) installerer netværks scannere og tilbyder at køre dem, hvis altså bash indlæring er det primære:



#!/bin/bash

# Scan LAN Range



tput setaf 3

# tput bold

echo

echo "Scanning LAN using NMAP, NBTSCAN and ARP-SCAN"

echo

tput setaf 1

echo "You will need to manually change range within this script to work. See the internal IP below."

echo "nmap, nbtscan, arp-scan and curl are needed to be installed."



# Check hostname

tput setaf 6

echo

echo -e '\033[32m'"Hostname :" $HOSTNAME



# Check Internal IP

internalip=$(hostname -I)

echo -e '\033[32m'"Internal IP :" $internalip

tput sgr0



# Check DNS

nameservers=$(cat /etc/resolv.conf | sed '1 d' | awk '{print $2}')

echo -e '\033[32m'"Name Servers :" $nameservers

tput setaf 6

tput bold



# This only work on Ubuntu 16.04. Please uncomment according to Your need.

nmcli dev show | grep DNS | sed 's/\s\s*/\t/g' | cut -f 2

echo



# This only work om Ubuntu 14.04. Please uncomment according to Your need.

# nmcli dev list | grep DNS | sed 's/\s\s*/\t/g' | cut -f 2

tput sgr0



echo "We gonna check if nmap (zenmap), nbtscan, curl and arp-scan is installed"

echo "If they aren't, we'll attempt to install them. An internet connection is requiered."

echo



# Check if connected to Internet or not

ping -c 1 google.com &> /dev/null && echo -e '\033[32m'"Internet connected, we'll attempt to install..." || echo -e '\033[32m'"Internet not available. If the programs is installed, please continue..."



# Check if zenmap, nbtscan and arpscan is installed and install if they aren't.

tput setaf 1

sudo apt-get install zenmap && sudo apt-get install nbtscan && sudo apt-get install arp-scan && sudo apt-get install curl

echo

tput setaf 3

tput bold

read -n1 -r -p "Press any key to continue..." key

echo



# Start nmap Host up

echo -e '\E[33m'"Starting nmap HOST UP ONLY piped to awk. Please wait ..."

tput sgr0

echo



# Change the range here:

nmap -sn 192.168.137.0/24 | awk '/is up/ {print up}; {gsub (/\(|\)/,""); up = $NF}'

echo



# Start nmap latency info

tput setaf 3

tput bold

read -n1 -r -p "For latency info, press any key to continue..." key

tput sgr0

echo



# Change the range here:

nmap -T5 -sn 192.168.137.0-255

echo



# Starting nbtscan

tput setaf 3

tput bold

read -n1 -r -p "Do You wanna scan using NBTSCAN? Press any key to continue..." key

echo

echo Identifying Masterbrowser using nbtscan - MSBROWSE...

tput sgr0

echo



# Change the range here:

nbtscan -v -s : 192.168.137.0/24

echo



# Start arp-scan

tput bold

echo -e '\033[33m'"Do You wanna ARP-SCAN as root? Press any key to continue...".

echo This work without changing LAN range

read -n1 -r -p "" key

tput setaf 1

echo

sudo arp-scan -l

tput sgr0

$SHELL

  • Log in to post comments

Svar søges

Den er go 0
Vil du have et sikrere og mere privat internet? Du skal blot installere Vivaldi-browseren med Proton VPN understøttelse! 0
14. februar = I Love Free Software Day 0
Lokal fil-deling - for de dovne. 0
Linux fra begynder til professionel af O'Reilly 0

Seneste aktivitet

2 stk Jolla C2 sælges 1
Det første forumindlæg efter installation af Forum-modulet 8
Test 1
Vanilla OS 12
Nye forum-indlæg viser sig kun 1 gang 1
Vil alle forumindlæg vise sig to gange 1
Hjælp til remote terminal vindue? 3
PCLinuxOS 19
Kan ikke boote på installation 24
80-20 reglen 1
Skærmlys fader ud på min bærbare 8
32 bit distro på max 700mb der stadig understøttes 26
Har vi nogen Linux konsulenter i Slagelse området? 3
Virkelig 7
gnome-software? 3
Archer T2U AC600 Wireless Dual Band USB Adapter 26
En farverig APT 3.0 udgivelse imponerer med sine nye funktioner 2
Unix's fødsel 2
Linux Mint 13
"Intet realistisk alternativ" - mig i r*ven 1

Copyright © 2025 Company Name - All rights reserved

Developed & Designed by Alaa Haddad