przenieś wszystkie pliki z katalogu do nowego podkatalogu w tym samym katalogu

1

Jak przenieść wszystkie pliki z katalogu do nowego podkatalogu w tym samym katalogu?

Lubię to:

/volume1/TEST/file1.jpg to /Volume1/TEST/_NEW_FOLDER/file.jpg
/volume1/TEST2/file2.bmp to /Volume1/TEST2/_NEW_FOLDER/file2.bmp
/volume1/TEST3/file3.dwg to /Volume1/TEST3/_NEW_FOLDER/file3.dwg
/volume1/TEST4/file4.(*) to /Volume1/TEST4/_NEW_FOLDER/file4.(*)
Mikrofon
źródło
(1) Który system operacyjny? (2) Czy pytasz tylko o sposób nieinteraktywny? (skrypt?)
miroxlav
Witam, potrzebuję skryptu basch (LINUX) z nieinteraktywnego ... to drugi skrypt z menedżera crond (harmonogram) | Ahoj, potřeboval bych script pro Linux který autor: měl běžet as druhý v řadě pro Crond Manager ,, prvním skriptem je: RSYNC (rsync -r --log-file = / volume1 / TEST / 1.log --compare-dest / volume1001 / TEST_2 / / volume1 / TEST / ALL / volume1 / Processing / _Compare
Mike

Odpowiedzi:

2
znajdź BaseFolder -indepth 1 -typ f | podczas czytania ścieżki; zrobić \
dest = "$ (dirname" $ ​​path ") / NewFolder"; mkdir "$ dest"; mv "$ path" "$ dest"; Gotowe
guest-vm
źródło
1

Nowa odpowiedź

Z wiersza poleceń możesz to zrobić w następujący sposób:

for dir in /volume1/TEST* ; do cd "$dir" ; mkdir _NEW_FOLDER ; mv *.* _NEW_FOLDER ; done

Lub napisz taki skrypt

#!/bin/bash
NFLDR=_NEW_FOLDER
for dir in /volume1/TEST*; do (
# for logging to syslog in a cron job, uncomment the following line
# logger moving contents of $dir to $dir/$NEWFLDR
        cd "$dir" && mkdir $NFLDR && mv *.* $NFLDR
); done
# logger moving to subfolders finished

następnie

chmod +x mvtosubfolders.sh
./mvtosubfolders.sh

Edycja: jeśli chcesz tego użyć poprzez cron, zapisz skrypt jako np. /usr/local/bin/mvtosubfolders.shI wykonaj plik wykonywalny. Dostosuj crontab, aby /usr/local/bin/mvtosubfolders.shregularnie wywoływać . Np.

# m h  dom mon dow   command
  0 5   *   *   1    /usr/local/bin/mvtosubfolders.sh

Przykładowe dane wyjściowe dla wiersza poleceń:

root@router ~/testfolder # tree
.
├── TEST1
   └── file1.jpg
├── TEST2
   └── file2.bmp
├── TEST3
   └── file3.dwg
└── TEST4
    ├── file4.avi
    ├── file4.cr2
    ├── file4.mov
    └── file4.tif

4 directories, 7 files
root@router ~/testfolder # for dir in /root/testfolder/TEST* ; do cd "$dir" ; mkdir _NEW_FOLDER ; mv *.* _NEW_FOLDER ; done
root@router ~/testfolder/TEST4 # cd ..
root@router ~/testfolder # tree
.
├── TEST1
   └── _NEW_FOLDER
       └── file1.jpg
├── TEST2
   └── _NEW_FOLDER
       └── file2.bmp
├── TEST3
   └── _NEW_FOLDER
       └── file3.dwg
└── TEST4
    └── _NEW_FOLDER
        ├── file4.avi
        ├── file4.cr2
        ├── file4.mov
        └── file4.tif

8 directories, 7 files
root@router ~/testfolder #

Stara, zła odpowiedź

Nieuwzględnianie podfolderów

Zakładając, że twoje pliki mają kropkę między nazwą pliku a rozszerzeniem, tak jak w powyższym przykładzie: mv *.* _NEW_FOLDER

root@router ~/testfolder # touch file{1,2,3,4,5}.jgp
root@router ~/testfolder # mkdir subfolder
root@router ~/testfolder # ls -al
total 12
drwxr-xr-x  3 root root 4096 Jun 18 09:58 .
drwx------ 24 root root 4096 Jun 18 09:58 ..
-rw-r--r--  1 root root    0 Jun 18 09:58 file1.jgp
-rw-r--r--  1 root root    0 Jun 18 09:58 file2.jgp
-rw-r--r--  1 root root    0 Jun 18 09:58 file3.jgp
-rw-r--r--  1 root root    0 Jun 18 09:58 file4.jgp
-rw-r--r--  1 root root    0 Jun 18 09:58 file5.jgp
drwxr-xr-x  2 root root 4096 Jun 18 09:58 subfolder
root@router ~/testfolder # mv *.* subfolder
root@router ~/testfolder # ls -al
total 12
drwxr-xr-x  3 root root 4096 Jun 18 09:59 .
drwx------ 24 root root 4096 Jun 18 09:59 ..
drwxr-xr-x  2 root root 4096 Jun 18 09:59 subfolder
root@router ~/testfolder # ls -al subfolder
total 8
drwxr-xr-x 2 root root 4096 Jun 18 09:59 .
drwxr-xr-x 3 root root 4096 Jun 18 09:59 ..
-rw-r--r-- 1 root root    0 Jun 18 09:58 file1.jgp
-rw-r--r-- 1 root root    0 Jun 18 09:58 file2.jgp
-rw-r--r-- 1 root root    0 Jun 18 09:58 file3.jgp
-rw-r--r-- 1 root root    0 Jun 18 09:58 file4.jgp
-rw-r--r-- 1 root root    0 Jun 18 09:58 file5.jgp
stueja
źródło
dziękuję, że działa, a kiedy nie wiem, jak zadzwonił podfolder? kiedy mam folder w innym folderze, więc ignoruje on skrypt, wykonanie z góry wie, ile tam Utwórz folder i nawet nie wiem, jaka będzie przyszła struktura tylu podkatalogów.
Mike
W twoim przykładzie istnieją dwie warstwy podfolderów. TEST{1..4}a _NEW_FOLDER. Który z nich masz na myśli, gdy mówisz „nie wiesz, jak nazywa się ten podfolder”? Nie wiesz TEST1czy nie wiesz _NEW_FOLDER? Jeśli nie znasz nazwy folderu, czy możesz być pewien, że jest to jedyny folder?
stueja
Folder testowy został wymieniony tylko jako przykład mojego problemu, prawda jest taka, że ​​nieznane drzewo, nie wiem, czy folder jest jedyną częścią tego komponentu, a zatem test {1,2,3,4} odbywa się za pomocą różnicy pomocy rsync wprowadzanie zmian i ta zmiana musi powrócić do oryginalnego folderu do nowego folderu jako zmiana. (_NEW_FOLDER)
Mike
DOBRZE. Posortujmy to. Pierwotny cel w Twoim pierwotnym pytaniu (przeniesienie plików do podfolderów) został osiągnięty. Teraz jest nowy cel dotyczący nowego narzędzia (rsync). Czy możesz szczegółowo opisać, co chcesz zrobić (w komentarzach lub, lepiej, w swoim pierwotnym pytaniu). rsyncto narzędzie do kopiowania danych z punktu A do punktu B. Daj nam znać, które dane chcesz skopiować z miejsca na miejsce, a my również możemy znaleźć rozwiązanie tego problemu. ;) - lub zadaj nowe pytanie, ponieważ właśnie zaakceptowałeś odpowiedź na to pytanie.
stueja
1.Pierwszy rsync -r --log-file = / volume1 / TEST / 1.log --compare-dest / volume1001 / TEST_2 / / volume1 / TEST / TEST_2 / volume1 / Diference / _Compare 1.a (Co to jest ponadto usuń in / volume1 / TEST / TEST_2) 2. Second find / volume1 / Diference / _Compare -mindepth 1 -type f | podczas czytania ścieżki; do \ dest = "$ (dirname" $ ​​path ") / NewFolder"; mkdir "$ dest"; mv "$ path" "$ dest"; zrobione 3. Przenieś / wolumin1 / Różnica / _Porównaj do / wolumin 1 / TEST / TEST_2) 4. (W końcu) Co mogę: zapisuje dowolne dane użytkownika (dane różnicowe w porównaniu do danych w folderze Kopia zapasowa, aby przejść do weryfikacji uprawnień użytkownika Korektory
Mike
0

Widząc, jak używasz ukośników, założę pochodną unix:

cd /volume1/
for I in TEST*; do mkdir $I/_NEW_FOLDER; mv $I/* $I/_NEW_FOLDER; done

Zauważ, że spowoduje to błąd przy próbie przeniesienia go _NEW_FOLDERdo siebie, ale nadal będzie działać.

Paweł
źródło