/ / Przenieść grupę plików do nowego folderu, jeśli ich nazwy, minus rozszerzenie, pasują? - bash, rekurencja, dopasowanie, grupowanie, nazwy plików

Przenieść grupę plików do nowego folderu, jeśli ich nazwy, minus rozszerzenia, pasują do siebie? - bash, rekurencja, dopasowanie, grupowanie, nazwy plików

Mam folder pełen plików o tej samej nazwie, ale różnych rozszerzeniach plików. Na przykład:

file-1.ai
file-1.svg
file-1.pdf
file-2.ai
file-2.svg
file-2.txt
file-3.ai
file-3.svg
example-1.pdf
example-3.mov

Czy jest jakiś sposób w Linuksie (jakiekolwiek programowaniejęzyk zrobi) Mogę przenieść grupę plików do nowego folderu (albo nowy folder na grupę plików, albo wszystko w jednym folderze), jeśli ich nazwy, minus rozszerzenia, pasują?

Odpowiedzi:

3 dla odpowiedzi № 1

Myślisz, że chcesz czegoś takiego.

#!/bin/bash

dir="/somedir/"
for i in "$dir"*; do
if [ -f "$i" ]; then
filename="${i%%.*}"
if [ ! -d "$filename" ]; then
mkdir "$filename"
fi

mv "$i" "$filename"
fi

done

na przykład

$ tree /somedir
/somedir
├── example-1.pdf
├── example-3.mov
├── file-1.ai
├── file-1.pdf
├── file-1.svg
├── file-2.ai
├── file-2.svg
├── file-2.txt
├── file-3.ai
└── file-3.svg

$ ./above_script

$ tree /somedir
/somedir
├── example-1
│   └── example-1.pdf
├── example-3
│   └── example-3.mov
├── file-1
│   ├── file-1.ai
│   ├── file-1.pdf
│   └── file-1.svg
├── file-2
│   ├── file-2.ai
│   ├── file-2.svg
│   └── file-2.txt
└── file-3
├── file-3.ai
└── file-3.svg

1 dla odpowiedzi nr 2

Można to zrobić na wiele sposobów. Jednym z rozwiązań byłoby po prostu użycie polecenia move:

mv file-1.* /new/directory

Spowoduje to przeniesienie wszystkich nazwanych plików file-1 niezależnie od rozszerzenia do nowego katalogu.


1 dla odpowiedzi nr 3

Rozważ ten skrypt:

for i in *.*; do
d="${i%.*}"
[[ ! -d "$d" ]] && mkdir "$d"
cp "$i" "$d"
done