Перемещать папки только с помощью mv

Другая возможность заключается в том, что в этом каталоге установлен "неизменяемый бит". Вы можете проверить это с помощью ls -d <директории>. Разрешения, установленные с помощью chattr, не будут отображаться на выходе stat:

stephan@x230 ~ % stat testdir
  File: ‘testdir’
  Size: 4096        Blocks: 8          IO Block: 4096   directory
Device: 801h/2049d  Inode: 13713629    Links: 2
Access: (0755/drwxr-xr-x)  Uid: ( 1000/ stephan)   Gid: ( 1000/ stephan)
Access: 2015-08-31 14:05:49.957299346 +0200
Modify: 2015-08-31 14:05:25.657267292 +0200
Change: 2015-08-31 14:05:42.685289494 +0200
 Birth: -


stephan@x230 ~ % lsattr -d testdir
----i--------e-- testdir`

Для удаления неизменяемого бита Вы должны быть корнем: chattr -i testdir

2
03.09.2018, 23:57
3 ответа

Для этого вам просто нужно добавить дополнительный / в конце *вот так:

mv folder/*.jpg destination (match only jpg files) 
mv folder/* destination (match anything found)
mv folder/*/ destination  (match only the folders) 

Это приведет к перемещению только папок внутри "папки" в место назначения, а не файлов внутри "папки" (обратите внимание, что файлы в подпапках перемещаются ).

11
27.01.2020, 21:51

Если вложенные папки имеют одинаковые имена, вы можете использовать ответ roaima . Если нет, вы можете использовать простой цикл оболочки:

mkdir -p destination
for name in folder/*; do
    [ ! -d "$name" ] && continue
    mv "$name" destination
done

Это зациклит все записи каталогов вfolder(файлах и каталогах ), проверит каждую из них на предмет того, является ли она директорией или нет, и переместит их, если это так.

Другой возможностью является использованиеfind:

mkdir -p destination
find folder -mindepth 1 -maxdepth 1 -type d -exec mv {} destination ';'

Это позволит найти все пути ко всем каталогам в folder(, но не ниже, а не к самому каталогу folder), и переместить каждый найденный каталог в destination.

0
27.01.2020, 21:51

В зависимости от фактических имен каталогов вы можете использовать это

mv folder/subfolder* destination/

Если нет шаблона(subfolder*)для соответствия именам папок, вы можете сделать это

find folder -mindepth 1 -maxdepth 1 -type d -exec mv {} destination/ \;

или даже это

find folder -mindepth 1 -maxdepth 1 -type d -exec mv -t destination/ {} +
0
27.01.2020, 21:51

Теги

Похожие вопросы