番号付きファイルの範囲を移動しますか?


14

別のディレクトリに移動する必要がある291の番号付きファイル(001から始まり、タイトルで終わり、291で終わります)があります。(001から021はフォルダー1に、022から053はフォルダー2に、必ずしも同じ数のファイルであるとは限りません)。

私はこのような厄介な方法でそれを行うことができると考えました: ls | head -n 21 | sed -r 's|(.*)|mv \1 /path/to/folder1|' | sh

もっと良い方法があると私はほぼ確信していますので、それは何でしょうか?

編集:それでうまくいったでしょうが、私は思い出しました...

ターミナルを使用して立ち往生していないので、ファイルマネージャーを使用してクリックアンドドラッグしました。質問はまだ残っています。


1
フォルダー1に21のサブフォルダー、フォルダー2に22のフォルダーが必要ですか?
ダニエルベック

unix.SEを確認しましたか?この上に良いスレッドがここにあります:unix.stackexchange.com/questions/12976/...
chrisjlee

@DanielBeckいいえ、ファイルを各フォルダに移動します。各フォルダーに送られるファイルの数は異なります。
Rob

@ ChrisJ.Leeそれは私がやっていたこと/以前にやったこととかなり似ています、私はそれが好きです。ファイルが別のフォルダー内の他のファイルと一致ls -l | grep ^- | wc -lするため、行数を取得できました。
Rob

1
@ロブ右。それでも、各ディレクトリに異なる数のファイル。これを自動化すること(ルールを含む)は、自分で数回実行するよりも多くの労力を要します。
ダニエルベック

回答:


25

手動でファイルを移動する必要があるのは必ずしも正確に21ファイルであるとは限らないため、効果的にこれを行うには、中かっこ展開を使用できます。

mv filename{001..21} dir1
mv filename{022..53} dir2
...

これはうまくいくようです、私はそれを試します。
Rob

1
大括弧の後にワイルドカードを追加すると、これは完全に機能します。これはまさに私が必要としたものです。
Rob

2
番号が名前の真ん中にある場合はfile{001..21}name、と書くことができます。ワイルドカードを使用する必要はありません。とにかく、それがあなたのために働いたことを嬉しく思います。
drrlvn 2012年

1

これにより、説明したとおりにファイルが移動します(2番目の範囲が2番目の21ファイルの場合は022から042になることを除いて)。

for ((i = 1; i <= 291; i++))
do
    ((d = (i - 1) / 21 + 1))
    printf -v file 'filename%03d' "$i"
    printf -v dir  'dirname%02d'  "$d"
    [[ -d "$d" ]] && mkdir "$d"
    mv "$f" "$d"
done

常に21ファイルとは限りませんが、ありがとうございます。
Rob

0

多くのファイル(1万または100万など)を移動するということですが、{1..20}だけを使用すると、シェルはファイルリストについてあまりにも長い間不満を言うので、

zsh、あなたは読み込むことができMVの組み込みを:

setopt extended_glob zmodload

zsh /ファイル

その後、次のようなコマンドを使用できます。

mv ./somefolder/{1..100000}.txt  pathto/yourfolder/

または、シェルスクリプトを記述している場合は、次のようなことができます。

for i in `seq $start $end`;  
    do  mv "prefix${i}suffix.txt" pathto/yourfolder/  
done

zshを使用していない場合は、https://unix.stackexchange.com/questions/128559/solving-mv-argument-list-too-longを参照してください。


このリンクで質問に答えることができますが、回答の重要な部分をここに含め、参照用のリンクを提供することをお勧めします。リンクされたページが変更されると、リンクのみの回答が無効になる可能性があります。「より詳細な回答」としてどの回答を参照していますか?
ラムハウンド2015

OPは異なるファイルを異なるディレクトリに移動したいので、これは実際には質問に答えません。
DavidPostill
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.